我正在Android平台上编写服务器客户端。如果其中一个客户端发送其中一个消息,则首先将消息发送到服务器并将服务器发送给客户端。当接收方客户端收到消息时,我必须setContentView
所以我需要打开消息传递屏幕。但它将消息放在不同的线程中,并作为参考传递给我的活动类。
Thread my = new MyThread(this);
并且在线程类中不能设置内容视图,因为给出了ViewRoot CalledFromWrongThread
这样的错误我该怎么办?
答案 0 :(得分:7)
UIThread是应用程序的主要执行线程。 这是运行大多数应用程序代码的地方。您所有的 应用程序组件(活动,服务,ContentProviders, BroadcastReceivers)是在这个线程和任何系统调用中创建的 这些应用程序是在这个线程中执行的。
当您明确生成一个新线程以在后台工作时, 这段代码不是在UIThread上运行的。那么如果发生什么呢? 这个后台线程需要做一些改变UI的东西吗?这个 是
runOnUiThread
的用途。其实你应该用一个 处理程序(有关详细信息,请参阅以下链接);它提供了这些 后台线程执行可以修改UI的代码的能力。 他们通过将UI修改代码放在Runnable对象中来实现这一点 将它传递给RunOnUiThread方法。
(有关UI线程的更详细说明,请参阅https://stackoverflow.com/a/3653478/448625)
简而言之,这应该解决它:
runOnUiThread(new Runnable() {
public void run() {
// some code that needs to be ran in UI thread
}
});
答案 1 :(得分:2)
ActivityName.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// set contentview here
}
});
答案 2 :(得分:0)
ActivityName.this.runOnUiThread(new Runnable() {
@Override
public void run() {
}
});