AMS中,静态广播串行化分发,动态广播并行化分发的原因是什么?
来源:5-4 说说动态广播的注册和收发原理
oRo
2020-01-16
(1)在AMS中 选择静态广播串行化分发,动态广播并行化分发,这样考虑分发的原因是什么?是因为动态广播偏向应用进程管理吗,比如进程是启动状态等等?
(2)ApplicationThread 调用 在应用端串行化,与静态广播在AMS的串行化处理类似吗?在应用端的串行化,我仅仅看到了post到主线程队列依次执行,这就是串行化分发,应用端不用等待超时,或是回调告诉它分发完成,然后执行下一条分发吗?如果是这样,直接执行innerReceiver的perform也可以做到,也不用使用applicationThread的调用了吧
写回答
1回答
-
1)静态广播可能涉及到启动新进程,是个比较重的操作,所以串行化比较合理,动态广播没有这个问题。
2)动态广播分发到应用端,通过ApplicationThread这个Oneway的Binder被串行化处理,串行化是binder驱动控制的。从Android设计者的角度,如果一下子来了大量的广播,一方面不希望阻塞AMS,另一方面不希望阻塞应用其它的Binder调用。所以由Binder驱动一个接一个地给消息传给应用进程。应用进程post到主线程的主要目的不是为了串行化分发,而是接下来的runtime可以从binder线程池转移到主线程工作了。执行innerReceiver的perform只是串行化这一个广播record,如果走ApplicationThread是全局所有广播都串行化。
00
相似问题