mNoLooperThreadHandler = new EventHandler(mainLooper);
msgobj = "NoLooperThread has no looper and handleMessage function executed in main thread!";
} else{
mNoLooperThreadHandler = new EventHandler(myLooper);
msgobj = "This is from NoLooperThread self and handleMessage function executed in NoLooperThread!";
}
mNoLooperThreadHandler.removeMessages(0);
if(bpostRunnable == false){
//send message to main thread
Message msg = mNoLooperThreadHandler.obtainMessage(2, 1, 1, msgobj);
mNoLooperThreadHandler.sendMessage(msg);
Log.e(TAG, "NoLooperThread id:--------+>" + this.getId());
}else{
//下面new出来的实现了Runnable接口的对象中run函数是在Main Thread中执行,不是在NoLooperThread中执行 记得 null == myLooper么
//注意Runnable是一个接口,它里面的run函数被执行时不会再新建一个线程
//您可以在run上加断点然后在eclipse调试中看它在哪个线程中执行
mNoLooperThreadHandler.post(new Runnable(){
public void run() {
// TODO Auto-generated method stub
tv.setText("update UI through handler post runnalbe mechanism!");
Log.e(TAG, "update UI id:--------+>" + Thread.currentThread().getId());
noLooperThread.stop();
}
});
}
}
}
class OwnLooperThread extends Thread{
private EventHandler mOwnLooperThreadHandler = null;
@Override
public void run() {
Looper.prepare();
Looper myLooper = Looper.myLooper();
Looper mainLooper= Looper.getMainLooper();
String msgobj;
if(null == myLooper){
mOwnLooperThreadHandler = new EventHandler(mainLooper);
msgobj = "OwnLooperThread has no looper and handleMessage function executed in main thread!";
}else{
mOwnLooperThreadHandler = new EventHandler(myLooper);
msgobj = "This is from OwnLooperThread self and handleMessage function executed in NoLooperThread!";
}
mOwnLooperThreadHandler.removeMessages(0);
//给自己发送消息
Message msg = mOwnLooperThreadHandler.obtainMessage(3,1,1,msgobj);
mOwnLooperThreadHandler.sendMessage(msg);
Looper.loop();
}
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case 101:
//主线程发送消息给自己
Looper looper = Looper.myLooper();//get the Main looper related with the main thread
//如果不给任何参数的话会用当前线程对应的Looper(这里就是Main Looper)为Handler里面的成员mLooper赋值
mHandler = new EventHandler(looper);
// 清除整个MessageQueue里的消息
mHandler.removeMessages(0);
String obj = "This main thread's message and received by itself!";
Message msg = mHandler.obtainMessage(1,1,1,obj);
// 将Mes
| 评论 |
|
|