主线程执行UI更新操作,子线程执行耗时操作,子线程通过MessageHandler通知主线程更新UI
步骤如下:
1. MainActivity.java 中new一个Handler对象
Handler handler=new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: //执行更新UI的操作 textView.setText("更新UI"); break; default: break; } } };
2. 子线程执行一段耗时操作后,需要更新UI,此时可添加如下代码
new Thread(new Runnable() { @Override public void run() { Message message=new Message(); message.what=1; handler.sendMessage(message); } }).start();
异步消息处理机制的原理:
1.Message
Message是在线程之间传递的消息,用于不同线程之间交换信息
2.Handler
在子线程中发送消息,然后在主线程中接收消息并进行处理
3.MessageQueue
一个队列,存放Handler发送的消息
4.Looper
不断从MessageQueue队列中取出消息,传递到Handler的handleMessage()方法中
5. message中传输数据
往message中添加数据
Bundle b = new Bundle(); b.putInt("age", 22); b.putString("name", "loulijun"); msg.setData(b);
//从message中取出数据
Bundle b = msg.getData(); int age = b.getInt("age");