背景
在看9.0源码的时候,偶然发现ContentWrapper.sendStickyBroadcast
被打上了Deprecated
标签。发现从API Level 21之后,就被弃用了。
StickBroadcast的特点
- ActivityManagerService会一直保存最新的StickyBroadcast在System_Server进程中
- 当有IntentFilter匹配的Receiver注册时,会将最新的Broadcast立即发送给Receiver接收该广播
- 所有进程在注册的时候,都会收到该广播(不仅仅只是发送者进程能收到,其他进程也可以收到)
- 所有进程都可以更新StickyBroadcast
- 发送者需要声明
android.permission.BROADCAST_STICKY
权限 - 只有当调用
removeStickyBroadcast
时,才会被清除
Sticky的广播会被所有进程接收。例如在用户A进程的某个Activity在onResume中注册相关的Receiver,在onPause中注销了相关的Receiver。B进程的某个Activity也进行了同样的操作,那么A和B进程的Activity在回到Resume状态时,就会接收到该广播。
原因
从removeStickyBroadcast可知,这一系列的api都被弃用了。
原因是因为这一系列函数簇没有安全性,每个用户都可以访问,每个用户都可以修改,有很大的安全风险。所以官方禁用掉了,推荐使用其他的机制来替代这种方案。
removeStickyBroadcast
网友评论