设为首页 加入收藏

TOP

Android Handler Message多线程实例(四)
2014-11-24 11:27:58 来源: 作者: 【 】 浏览:2
Tags:Android Handler Message 线程 实例
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
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java创建线程的三种方式 下一篇如何使用Java synchronized进行线..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)