Handler 把消息对象放到 MessageQueue 当中,而 Looper 负责在消息队列头部不断取出消息对象。取出的对象再交给 Handler 处理。
- 先创建一个继承 Handler 的类,注意是导入 Android.os.Handler(非常重要)
class firstHandler extends Handler{}
- 复写方法 handleMessage(Message msg)
- 创建 Handler 对象
handler = firstHandler()
- 生成一个 Message,并且给 what 成员变量赋值
Message msg = handler.obtainMessage();
msg.what = 2;
- 将消息对象放置到消息队列中。
handler.sendMessage(msg);
-Looper 将会从消息队列当中将消息对象取出;
-Looper 将会找到与消息对象对应的 Handler 对接(每一个 Message 对象都有与之对应的 Handler 对象);
-Looper 将会调用 Handler 对象的 handleMessage(Message msg) 方法,用于处理消息对象。
注:不管是在 WorkerThread 还是在 MainThread 中都可以发送消息,即:handler.sendMessage(Message msg)
1)在新建线程的 run() 中发送 Message:
- class NetworkThread extends Thread{
- @Override
- public void run(){
- String s = "模拟从网络中获取的数据";
- Message msg = handler.obtainMessage();
- msg.obj = s;
- handler.sendMessage(msg);
- }
- }
2)复写 handleMessage() 方法。因为这个方法是被主线程调用的,所可以更改 UI。
- class MyHandler extends Handler{
- @Override
- public void handleMessage(Message msg){
- tring s = (String)msg.obj;
- textView.setText(s);
- }
- }
来源: