setContentView in a different thread



我正在android平台上编写一个服务器客户端。若其中一个客户端向其中一个发送消息,则消息首先到达服务器,然后服务器将其发送到客户端。当接收方客户端收到消息时,我必须setContentView,所以我需要打开消息屏幕。但它将消息放在另一个线程中,我将活动类作为引用传递。

Thread my = new MyThread(this);

在线程类ı无法设置内容视图,因为给出了ViewRoot CalledFromWrongThread这样的错误,我该怎么办?

UIThread是应用程序执行的主线程。这是大多数应用程序代码的运行位置。你所有的应用程序组件(活动、服务、内容提供商、,BroadcastReceivers),并且任何系统调用对那些应用程序的调用是在这个线程中执行的。

当您显式生成一个新线程以在后台进行工作时,此代码不是在UIThread上运行的。那么,如果这个后台线程需要做一些改变UI的事情吗?这是runOnUiThread的作用。实际上你应该使用处理程序(请参阅下面的链接了解更多信息);它提供了这些后台线程执行可以修改UI的代码的能力。他们将UI修改代码放在Runnable对象中将其传递给RunOnUiThread方法。

(请参见https://stackoverflow.com/a/3653478/448625对于什么是UI线程的更详细解释)

简而言之,这应该可以解决问题:

runOnUiThread(new Runnable() {
    public void run() {
        // some code that needs to be ran in UI thread
    }
});
ActivityName.this.runOnUiThread(new Runnable() {
     @Override
     public void run() {
         // set contentview here
     }
});
ActivityName.this.runOnUiThread(new Runnable() {
     @Override
     public void run() {
     }
});

相关内容

最新更新