计时器任务使应用程序崩溃

时间:2015-09-16 16:05:44

标签: java android

我的应用程序中有一个Canvas对象,我想每20毫秒更新一次。我尝试了Java的TimerTask,但它在几次更新后让我的应用程序崩溃了。这是更新代码;

 timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            invalidate(); // canvas's update
        }
    }, 20, 20);

我该怎么办?

编辑:错误日志:

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

2 个答案:

答案 0 :(得分:0)

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

由于调用invalidate() 50次/秒不太可能是您尝试解决的任何问题的正确解决方案,您可能希望提出一个单独的Stack Overflow问题,解释您正在尝试的各种更改每20毫秒到你的用户界面,看看推荐的方法是什么。或者,拿起一本关于Android游戏开发的书 - 虽然你可能没有构建游戏,但是游戏开发者对Canvas的描述也存在这些问题,所以他们使用的技术也可能与你相关

答案 1 :(得分:0)

如果你真的想要这样做,只需将invalidate更改为postInvalidate即可。