我有一个画布对象在我的应用程序中,我想每隔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.发布于 2015-09-17 00:16:44
在这种情况下,在后台线程上调用run(),在该后台线程上调用invalidate()。这将导致您的问题中的异常,因为这些类型的更新只能在主应用程序线程上完成。
由于每秒调用invalidate() 50次不太可能是您试图解决的任何问题的正确解决方案,因此您可能希望问一个单独的堆栈溢出问题,在该问题中,您解释每隔20ms尝试对UI进行哪些类型的更改,以了解推荐的方法是什么。或者,拿起一本关于Android游戏开发的书-虽然你可能不是在开发游戏,但游戏开发人员也有这些类型的担忧,所以他们使用的技术可能也与你相关。
发布于 2015-09-17 00:25:28
如果您确实想这样做,只需将invalidate更改为postInvalidate即可。
https://stackoverflow.com/questions/32613607
复制相似问题