首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计时器任务导致应用程序崩溃

问计时器任务导致应用程序崩溃
EN

Stack Overflow用户
提问于 2015-09-17 00:05:44
回答 2查看 72关注 0票数 0

我有一个画布对象在我的应用程序中,我想每隔20毫秒更新一次。我试过Java的TimerTask,但它在几次更新后使我的应用程序崩溃。下面是更新代码;

代码语言:javascript
复制
 timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            invalidate(); // canvas's update
        }
    }, 20, 20);

怎么办?

编辑:错误日志:

代码语言:javascript
复制
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
EN

回答 2

Stack Overflow用户

发布于 2015-09-17 00:16:44

在这种情况下,在后台线程上调用run(),在该后台线程上调用invalidate()。这将导致您的问题中的异常,因为这些类型的更新只能在主应用程序线程上完成。

由于每秒调用invalidate() 50次不太可能是您试图解决的任何问题的正确解决方案,因此您可能希望问一个单独的堆栈溢出问题,在该问题中,您解释每隔20ms尝试对UI进行哪些类型的更改,以了解推荐的方法是什么。或者,拿起一本关于Android游戏开发的书-虽然你可能不是在开发游戏,但游戏开发人员也有这些类型的担忧,所以他们使用的技术可能也与你相关。

票数 0
EN

Stack Overflow用户

发布于 2015-09-17 00:25:28

如果您确实想这样做,只需将invalidate更改为postInvalidate即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32613607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档