loop中的queue.next 返回null的话,主线程如果没有消息,应用不应该直接退出了吗
来源:8-3 handler的消息延时是怎么实现的?
qq_有我在_3
2020-03-12

写回答
1回答
-
海怪
2020-03-14
queue.next()返回null 有两钟情况
第一种情况是刚进入next()时判断mPtr等于0时会返回null

第二种情况是在next()方法的for循环中判断mQuitting为true时返回null

但是这两种情况在主线程Looper中MessageQueue里是不会发生的
因为主线程中Looper的MessageQueue初始化时被设置为不可退出的消息队列,mQuitAllowed字段为false,


所以在MessageQueue中mQuitting不会被赋值为true,mQuitting是false;因为mQuitting是false,导致mPtr不会被赋值为0

所以主线程中Looper里面的MessageQueue的next()方法是不会返回null的,Looper不会退出消息循环
10
相似问题





