1、在主线程中创建handler
private Handler handler = new Handler(){
//接收消息并处理消息
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};
2、在子线程中得到handler的引用,并发送消息给主线程
Message msg = new Message();
msg.obj = bm;
handler.sendMessage(msg);
3、在主线程中修改UI
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bitmap bm = (Bitmap) msg.obj;
iv.setImageBitmap(bm);
}
-
消息处理机制原理
所有使用UI界面的操作系统,后台都运行着一个死循环,在不停的监听和接收用户发出的指令,一旦接收指令就立即执行。
-
Looper Message Handler三者之间的关系:(重点)
当我们的Android应用程序的进程一创建的时候,系统就给这个进程提供了一个Looper,Looper是一个死循环, 它内部维护了一个消息队列,Loop不停地从消息队列中取消息(Message),取到消息就发送给了Handler,最后Handler根据接收到的消息去修改UI。
-
消息处理常用的API:
//第一个API runOnUiThread
//第二个API handler.postDelayed
//第三个API //handler.postAtTime