Handler从入门到继续
Handler从入门到继续Android异步消息机制——HandlerHandler机制的流程Handler机制的基本用法创建一个Handler实例向子线程传入handler在需要的时候从子线程中回传一个消息结语Android异步消息机制——HandlerAndroid的Handler机制是一种线程间通信机制,可以避免耗时操作在主线程中进行致使Activity超时而被关闭的问题。刚开始看这个...
Handler从入门到继续
Android异步消息机制——Handler
Android的Handler机制是一种线程间通信机制,可以避免耗时操作在主线程中进行致使Activity超时而被关闭的问题。
刚开始看这个机制时,看到了很多Looper, MessageQueue, Handler等内容,讲到源码级别了,感觉真的高深莫测。
Handler机制的流程
看了很多blog后,我发现其实入门时不用看的那么复杂,只要知道Handler就好了,Handler可以翻译为处理者,就是处理消息的人的意思。他相当于A线程的秘书,当A有件事情需要委托给B做时,就叫秘书通知B,B做完后告诉秘书,他做完了,可以上报给A,让A再做后序的工作。
Handler机制的基本用法
秉着实用主义原则,还是先从Handler的使用角度来说总结一下Handler的用法吧。
创建一个Handler实例
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "handleMessage: msg.what = " + msg.what + " msg.arg = " + msg.arg1);
switch (msg.what) {
case OVER:
text.setText("下载完成");
break;
case PROGRESS:
text.setText("已完成" + msg.arg1 + "%");
break;
default:
break;
}
}
};
需要覆写handleMessage方法,该方法通是通过msg.what来判断消息类型,从而进入不同的业务处理逻辑中。
向子线程传入handler
class DownloadThread extends Thread {
Handler handler;
public DownloadThread(Handler handler) {
this.handler = handler;
}
}
在需要的时候从子线程中回传一个消息
实例中模拟一个下载动作,即向下载子线程中传入handler,定时用该handler构造一个message,回传给主线程更新TextView显示。
@Override
public void run() {
while (progress < 100) {
Message response = Message.obtain(handler);
response.what = PROGRESS;
progress += 5;
if (progress == 100) {
response.what = OVER;
}
response.arg1 = progress;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
response.sendToTarget();
}
}
- what
用来标记该消息类型,如PROGESS、OVER都是用来表示现在下载所处状态。 - arg1
是用来存储消息中的其他附加值,如实例中arg1用来存储下载进度。
结语
好了,这样一个简单的handler机制的demo就算完成了。Android的框架为我们将观察者机制完全搭好,我们需要做的是在主线程中构造好handler里的业务处理逻辑,并子线程中进行消息反馈即可。
更多推荐
所有评论(0)