setContentView在另一个线程中

时间:2012-07-20 12:55:52

标签: android

我正在Android平台上编写服务器客户端。如果其中一个客户端发送其中一个消息,则首先将消息发送到服务器并将服务器发送给客户端。当接收方客户端收到消息时,我必须setContentView所以我需要打开消息传递屏幕。但它将消息放在不同的线程中,并作为参考传递给我的活动类。

Thread my = new MyThread(this);

并且在线程类中不能设置内容视图,因为给出了ViewRoot CalledFromWrongThread这样的错误我该怎么办?

3 个答案:

答案 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() {

     }
});