Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计时器任务导致应用程序崩溃_Java_Android - Fatal编程技术网

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

Java 计时器任务导致应用程序崩溃,java,android,Java,Android,我的应用程序中有一个Canvas对象,我想每20毫秒更新一次。我尝试了Java的TimerTask,但在几次更新后,它使我的应用程序崩溃。这里是更新代码 timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { invalidate(); // canvas's update } }, 20, 20); 我该怎么办 编辑:错

我的应用程序中有一个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.
在这种情况下,在后台线程上调用
run()
,在该后台线程上调用
invalidate()
。这将导致您在问题中遇到的异常,因为这些类型的更新只能在主应用程序线程上完成


由于每秒调用
invalidate()
50次不太可能是解决您试图解决的任何问题的正确解决方案,因此您可能希望提出一个单独的堆栈溢出问题,在该问题中,您将解释每20毫秒尝试对UI进行何种更改,以了解推荐的方法。或者,拿起一本关于Android游戏开发的书——虽然你可能没有在构建游戏,但在
画布上绘制的游戏开发人员也有这些顾虑,因此他们使用的技术可能也与你相关。

如果你真的想这样做,只需将
失效
更改为
后验证

你应该向我们展示你的Logcat中的错误信息。发布你的Logcat错误。这是一个非常小的游戏项目,我已经完成了给定的代码。它使用画布,我不想改变它。@microvave程序员:这并不意味着每秒调用
invalidate()。