Handler零碎记录

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中会检查

参考链接:

  • Java层的Handler机制
  • 为什么Looper中的Loop()方法不能导致主线程卡死?

你可能感兴趣的:(Handler零碎记录)