1.message怎么被分发到主线程
消息的分发是这句:msg.target.dispatchMessage(msg);
其中msg.target是指发出消息的Handler,在Handler初始化的时候是需要Looper的;
回到问题我们需要改一下, msg是被分发到Looper所在的线程的
2.Looper.loop()怎么不把主线程卡死
死循环又不会卡死线程,造成ANR的根源是消息处理不及时;一个消息的耐心只有n秒,如果等待n秒还没有轮到它的时候就要报告用户了(ANR)。
3.Looper.prepare()的私有构造方法
private static void prepare(boolean quitAllowed)
MainLooper中默认传入的false,表示不允许退出,当Looper调用quit相关方法传递到MessageQueue中会检查
参考链接:
网友评论