如何使用不同的线程移动在UI线程上创建的视图

时间:2015-04-16 17:55:35

标签: android multithreading view

所以我有这个观点,它贯穿于我所拥有的不同观点。我尝试使用新的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(),但我仍然会丢失帧,而不是那么多。

1 个答案:

答案 0 :(得分:0)

你的问题不是很清楚。 你是什​​么意思&#34;所以我有这种观点,它贯穿于我所拥有的不同观点#34;

处理程序主要用于2个线程之间的通信。

给定链接中的PhotoTask只是用于通过Handler将消息从1个线程发送到另一个线程的对象/模型。

如果要更新视图,则需要仅在main / UI线程中执行此操作。如果要从单独的线程执行某些UI更新,则需要通过runOnUiThread / view.post / handler.post将操作作为单独的可运行实例传递来通知默认UI线程处理程序。 我可以澄清如何使用共享视图而不使用任何处理程序或线程,如果这是你需要的。

相关问题