handler的基本使用
1.Handler是什么?
主要是为了接受子线程的消息,配合主线程更新UI。
在Android系统内,主线程应该专注于更新UI,而不会把精力放到,请求网络,或者本地文件上,从而阻塞自己,使得自己的应用出现anr(application not responding)的情况。
还有就是Android中Android UI组件是线程不安全的,也就是说,更新UI的操作希望只在主线程中进行,而不希望在子线程中进行,Handler自然而然的就出现了。
2.Handler、Looper、MessageQueue 与 Message
looper:循环读取消息,交由Handler处理,一个线程对应一个looper
MessageQueue:消息队列,一个looper对应一个消息队列
Message:消息,一个消息队列有多个消息
Handler:处理与分发消息,每个消息最多指定一个handler处理
3.handler中的方法
post系列
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
Send系列
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
可以看一下post(Runable r)的实现
public final boolean post(Runable r)
{
return sendMessageDelayed(getPostMessage(r),long)
}
//而getpostMessage则是将runable包装成message
private static Message gerPostMessage(Runnable r)
{
Message m = Message.obtain();
m.callback = r;
return m;
}
在处理message的时候,如果Message.callback不为空则使用这个将优先使用callba来处理
Handle.mcallback不为空则使用mcallback处理
如果前两个都不存在则使用handleMessage处理