美文网首页Android
android8.0限制隐式广播的原因和解决方案

android8.0限制隐式广播的原因和解决方案

作者: 瑟闻风倾 | 来源:发表于2020-12-22 16:58 被阅读0次

参考

(1) 为何限制隐式广播:在Manifest里面注册的系统广播接收器会被缓存在系统中,即使当App关闭之后,如果有相应的广播发出,应用程序仍然会被唤醒。比如如果有20个App在Manifest里面注册了ACTION_BOOT_COMPLETED的广播接收器监听设备启动,那么当设备启动时,就会有20个应用程序被唤醒并作出相应的动作。而动态注册的广播则跟随组件的生命周期而消存。因此在Manifest里面注册广播接收器的App越多,设备的性能就越容易受到影响,限制隐式广播主要是为了优化系统性能。
(2) 解决方案

  • 优先使用动态注册Receiver的方式,能动态注册绝不使用Manifest静态注册
IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.xiaoqiang.try.something.receiver");
    TheReceiver receiver = new TheReceiver();
    registerReceiver(receiver, intentFilter);
  • 如果一定要Manifest静态注册,那么当发送广播的时候,指定广播接收者的包名,即发送显式广播
Intent intent = new Intent("com.xiaoqiang.try.something.receiver");
    intent.putExtra("receive","test broadcast");
    intent.setPackage(getPackageName());
    //intent.setComponent(...)
    sendBroadcast(intent);
  • 如果要接收系统广播,而对应的广播在Android8.0中无法被接收,那么只能暂时把App的targetSdkVersion改为25或以下。但现在工信部要求targetSdkVersion最小为26(android8.0)

相关文章

网友评论

    本文标题:android8.0限制隐式广播的原因和解决方案

    本文链接:https://www.haomeiwen.com/subject/sfbsnktx.html