在 用Handler实现线程间的消息通信 这个实例中,我们在 Worker Thread 中将消息发送到主线程里,然后修改 UI。其实标题起得不是那么对…… 因为我们还需要一种需求,就是在 UI Thread 将消息发送到 Worker Thread,两者结合起来才叫做“线程间的消息通信”。而且这种需求也很普遍,比如我们在首页的图片列表中,点击刷新,或者下来刷新什么的,就可能需要从 UI Thread 中发送消息给 Worker Thread,然后 Worker Thread 去检查服务器,看有没有内容更新,有就更新,没有就阻塞。
那么现在我们就来做这么一个最简单的小例子来说明吧:
private Button btn_refresh;
private Handler refrsh_handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_refresh = (Button)findViewById(R.id.btn_refresh);
btn_refresh.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Message msg = refrsh_handler.obtainMessage();
refrsh_handler.sendMessage(msg);
}
});
RefreshThread rt = new RefreshThread();
rt.start();
}
class RefreshThread extends Thread{
@Override
public void run(){
Looper.prepare();
refrsh_handler = new Handler(){
@Override
public void handleMessage(Message msg){
System.out.println("接收到来自主线程的消息了。");
}
};
Looper.loop();
}
}
点击按钮 btn_refresh,创建一个 msg 对象,利用 refrsh_handler 将消息 msg 发送到消息队列中。
实例化线程 RefreshThread,RefreshThread 利用 Looper 对象从消息队列中将数据取出。
很简单的过程。程序运行结果如下: