无法使用Handler解决CalledFromWrongThreadException

时间:2010-05-12 12:53:56

标签: android exception multithreading

我会尽量保持简单:

在我的主要活动中,我制作了一个处理程序:

public class ARViewer extends ARDisplayActivity {

    public final MHandler mHandler = new MHandler(this);

 public void onCreate(Bundle savedInstanceState) {
...

MHandler班:

public final class MHandler extends Handler{

        //main activity
 private ARViewer arnv;

        public MHandler(ARViewer arnv){
  this.arnv = arnv;
 }

        @Override
 public void handleMessage(Message msg) {
            ...
            case H_RR :
                  arnv.setContentView(R.layout.routeplanner);    
                  break;
            ...
  super.handleMessage(msg);
 }
}

但是如果我从另一个类中的回调函数调用handleMessage方法,肯定来自另一个线程,我仍然会收到异常消息:CalledFromWrongThreadException (Only the original thread that created a view hierarchy can touch its views)

public void rFound(Route route) {
           Message msg = new Message();
           msg.what = MHandler.H_RR;
           ARViewer.arnv.mHandler.handleMessage(msg);
}

2 个答案:

答案 0 :(得分:3)

您不需要参考那里的活动。 在创建UI内容​​时创建新的runnable。并做mHandler.post(myUIRunnable); 示例在这里: http://developer.android.com/guide/appendix/faq/commontasks.html#threading

答案 1 :(得分:0)

您应该为Handler调用sendMessage(),并将消息ID作为H_RR。这将自动调用主线程中的handleMessage()。