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