所以我有这个观点,它贯穿于我所拥有的不同观点。我尝试使用新的thread
来移动它,但我得到了#34;无法从与#34;上创建的不同的线程访问View,所以我想,"无论如何然后将其移至主线程"。所以,我目前有runOnUiThread(this)
(该类实现了Runnable)。
现在,它说:
Skipped x frames! The application may be doing too much work on its main thread.
我搜索了一个漏洞,发现我可以使用Handler
来执行此操作,我可以遵循这一点,直到它讨论实现任务。 They使用了一个名为PhotoTask
的任务,不知道它是什么或它来自哪里,我迷路了。
那么有人可以解释Task
或者告诉我另一种潜在的方法吗?
导致错误的代码(请注意,有更多if
个语句,但内部的语句与此语句完全相同:
while (lackees[i].getTileX() < lackees[i].getDestX()
&& lackees[i].getTileY() < lackees[i]
.getDestY()) {
lackees[i].setTileX(lackees[i].getTileX() + 1);
lackees[i].setTileY(lackees[i].getTileY() + 1);
getTileAt(0, lackees[i].getTileX() - 1,
lackees[i].getTileY() - 1).removeView(
lackees[i]);
getTileAt(0, lackees[i].getTileX(),
lackees[i].getTileY()).addView(lackees[i]);
进度更新#1 :
似乎wait()
最好使用Thread.sleep()
,但我仍然会丢失帧,而不是那么多。
答案 0 :(得分:0)
你的问题不是很清楚。 你是什么意思&#34;所以我有这种观点,它贯穿于我所拥有的不同观点#34;
处理程序主要用于2个线程之间的通信。
给定链接中的PhotoTask只是用于通过Handler将消息从1个线程发送到另一个线程的对象/模型。
如果要更新视图,则需要仅在main / UI线程中执行此操作。如果要从单独的线程执行某些UI更新,则需要通过runOnUiThread / view.post / handler.post将操作作为单独的可运行实例传递来通知默认UI线程处理程序。 我可以澄清如何使用共享视图而不使用任何处理程序或线程,如果这是你需要的。