关于主线程Looper循环因为消息为空后,阻塞住唤醒问题

来源:8-5 主线程进入loop循环了为什么没有ANR?

小旋风_qsh

2019-12-17

老师,有几个场景不太懂,想请教下;
假设场景:
1、如果主线程此时looper循环因为MessageQueue中消息为空而阻塞住了,此时主线程休眠了;如果此时Actitity(可理解为客户端)拿主线程的handler 可以再往队列里再入队一个消息,从而唤醒主线程么?(主线程自己唤醒自己)

2、如果主线程休眠是必须由别的线程唤醒,能举一个关于主线程因为消息为空而休眠,被binder线程唤醒的例子么?

写回答

1回答

风语

2019-12-19

您好,第一个问题,主线程如果已经休眠了,只能通过别的线程来唤醒了,自己是没法唤醒自己的

第二个问题,比如你点了一个按钮,系统给事件分发到App进程,这就涉及到跨进程通信,主线程被binder线程唤醒了

2
3
风语
回复
oRo
这里不是其他线程唤醒的,而是在阻塞的时候就算好一个超时时间,到时间就返回了。
2020-02-01
共3条回复

剖析Framework面试 冲击Android高级职位

一手助力冲刺Android高级职位,一手把握系统底层原理,理清面试思路,提升技术段位

1406 学习 · 187 问题

查看课程