美文网首页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