当前位置: 代码迷 >> Android >> 在Activity中创建了一个handler,但在handler中取线程ID时取得的却不是Activity的ID号,请问原因
  详细解决方案

在Activity中创建了一个handler,但在handler中取线程ID时取得的却不是Activity的ID号,请问原因

热度:89   发布时间:2016-05-01 10:13:57.0
在Activity中创建了一个handler,但在handler中取线程ID时取得的却不是Activity的ID号,请教原因。
代码如下:


public class MainActivity extends Activity implements Runnable{

 Handler handler = new Handler(){
public void handleMessage(Message msg){
S.p(Thread.currentThread().getId()+"-------------Handler");
}
};
 
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        S.p(Thread.currentThread().getId()+"-------------MainActivity");
        
        new Thread(this).start();
    }
    
    @Override
public void run() {
    
     S.p(Thread.currentThread().getId()+"-------------New Thread");
     try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
     handler.handleMessage(handler.obtainMessage());
}
}

------解决方案--------------------
引用:
引用:

主线程拥有自己的消息列队,一般线程创建时没有自己的消息列队,消息处理时就在主线程中完成,如果线程中使用Looper.prepare()和Looper.loop()创建了消息队列就可以让消息处理在该线程中完成。

Java code


public class MainActivity extends Activity implement……


不仔细看还没看到呢 :-)  

你用错了handler.handleMessage(handler.obtainMessage());
改成handler.sendMessage(handler.obtainMessage());


不然相当于子函数调用了。

  相关解决方案