首页 > 代码库 > Android学习笔记(十三) Handler
Android学习笔记(十三) Handler
可用于解决上一则笔记所提到的WorkerThread无法修改UI控件的问题
一、Handler、Looper和MessageQueue的基本原理
Handler把消息对象放到MessageQueue当中,而Looper负责在消息队列头部不断取出消息对象。取出的对象再交给Handler处理。
二、一个简单的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)方法,用于处理消息对象。
三、在主线程当中实现Haandler的handleMessage()方法
注:不管是在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); } }
Android学习笔记(十三) Handler