直接说总结
想下Handler怎么就处理到Looper发过来的消息呢
- 我们一开始Handler就持有Looper的对象,同时也持有了Looper对象里面的MessageQueue对象,记住这是持有Looper对象,而不是在Handler新生成的,这个Looper对象是主线程默认创建的,也是唯一一个
- ok,这时候mHandler.sendMessage(msg),它发msg到MessageQueue中,同时也标记了这msg的target是当前handler。
- Looper对象一直在loop自己的messageQueue,也就loop Handler中的MessageQueue,取出消息再通过msg.target.dispatchMessage(msg);msg.target就是发消息handler
- 即调handler的dispatchMessage方法,里面就会调重写的handleMessage方法,就可以处理消息
具体源码分析看大佬的 https://www.jianshu.com/p/b4d745c7ff7a
仔细品我的总结也是可以的,你品
Handler内存泄漏问题
@Override
protected void onDestroy() {
super.onDestroy();
if (mHandler != null){
mHandler.removeCallbacksAndMessages(null);
}
}
网友评论