Handler 和 Looper关系
Handler是对我们需要线程执行的一类任务的处理管理类,而Looper是android线程所拥有的循环心跳行为的管理类,例如主线程就是在一开始就执行了Looper.loop(),死循环维持app。然后每个Handler post message到Looper的队列中,Looper循环获取队列中message进行执行
Handler初始化和各种回调
Looper循环获取message,然后会调用每个massage.target.dispatchMessage,从而执行Handler中的代码,也就是下面的
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
可以看到这里有几个回调并且最后只会执行其中一个
优先级最高的是message中的callback,这也是我们使用Handler.postXX(Runnable r)方法时候传入我们想执行的代码段的地方
mCallback.handleMessage,这个是在我们初始化一个Handler时候构造函数传入的
handleMessage(),这个是我们构造Handler子类时候必须实现的方法
可以看到message中方法优先级最高,然后是两种实例化Handler方式:匿名子类、实例化都有着自己的传入我们自己处理逻辑的能力
待补充,如果有错误,望指出交流,十分感谢