Sticky Broadcast被禁用的原因

背景

在看9.0源码的时候,偶然发现ContentWrapper.sendStickyBroadcast被打上了Deprecated标签。发现从API Level 21之后,就被弃用了。

Sticky Broadcast被禁用的原因_第1张图片
SendStickyBroadcast

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都被弃用了。

原因是因为这一系列函数簇没有安全性,每个用户都可以访问,每个用户都可以修改,有很大的安全风险。所以官方禁用掉了,推荐使用其他的机制来替代这种方案。

Sticky Broadcast被禁用的原因_第2张图片
removeStickyBroadcast

你可能感兴趣的:(Sticky Broadcast被禁用的原因)