在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-优快云博客
里面,我们查看到input事件唤醒应用中的looper阻塞,
作为对比,我们再看看广播中的唤醒,我们知道,在注册的广播接收器收到消息时,即广播的receiver调用的时候,是执行在主线程的,这显然是handler调用唤起的,比如亮屏这样的系统广播,我们猜测是AMS通过广播的相关处理,通过唤醒应用中的binder线程,调用相关方法,里面再调用主线程关联的handler来唤醒主线程looper阻塞,
过程比较复杂,这里说说大概流程,AMS通过IApplicationThread这个app的代理对象来进行调用,执行到app进程中,(这个时候是在ApplicationThread这个binder线程里)
app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,
data, extras, ordered, sticky, sendingUser, app.repProcState);
最终调用到广播binder对象的
ReceiverDispatcher.performReceive方法里,里面post到主进程。