关于Broadcast的基础知识
关于Broadcast的基础知识,网上已经有很多不同的版本了,这里推荐罗升阳的,大概的流程上的东西还是讲到了的。那么,在这里,鄙人只是提出一些基本的知识点出来,作为普及,或者不想看长篇累犊的博客的同学看的。
1、广播分为时序广播(order broadcast)和非时序广播(parell broadcast),还有一种叫做粘性广播(stick broadcast)----其实和前两者没太多关系,而且也不影响对于broadcast timeout的理解,可以先放着不管
2、非order的处理是异步的,order的是同步的(因此,加入了timeout机制
3、如何区分一个广播是时序的还是非时序的?
(1)静态注册的receiver,其被发送的广播一定是order的
(2)动态注册的receiver,如果发送时,调用的是sendBroadcast()则一定非时序的,但如果是sendOrderBroadcast()则一定是时序的。
小小总结一下:大部分广播的发送都采用了order的机制,只有动态注册的receiver才有可能因为发送广播时调用的是sendBroadcast才可能为非order的了。而一个“广播--接收--应答”的持续时间只有10s(正常情况下),所以如果我们在receiver的onReceive()中做太多事情的话,很可能会引起timeout而出现Anr Dialog。而一旦ANR了,那么你的某些依赖广播的receiver去执行的功能可能就不行了。
关于广播分类以及是否ANR,您看明白了吗?