Android O 8.0 BroadcastReceiver 注册工具

关于 Android O

   不出意外,为了控制 App 自动唤醒,Google 在新系统中又一次严格控制了 App 的后台行为,这一次在 Menifest 中注册的广播 Action 大部分都失效了。
   为了方便在 8.0 上继续使用 Menifest 注册 Receiver,只能手动解析 Menifest 转为动态注册。所以顺手写了这么一个工具。  github
  

 使用

  1. 导入项目中的 registerLib 模块。
  2. 在 Application onCreate 时调用
@Override
    public void onCreate() {
        super.onCreate();
        ReceiverDynamicRegister.registerAsync(this, new ReceiverDynamicRegister.Callback() {
            @Override
            public void onSuccess(List<BroadcastReceiver> receivers) {
                Log.v("MyApplication", "register receiver success!");
            }

            @Override
            public void onError(Throwable throwable) {

            }
        }, null);
    }

注意

关于白名单

Android O 对于在 Menifest 中静态注册的广播有如下规则:
1. 经常被大量 App 监听的 Action 将失效。
2. 偶尔发生的 Action 依然生效:例如 BOOT_COMPLETE,白名单 link
3. 有签名权限的依然生效。
4. 只会发给自己的 Receiver 依然生效。

以上情况本项目基本都有考虑,不过用户依然可以使用 addWhiteAction 添加白名单,注意要在注册之前调用。

其他

  1. 可以使用 register 或者 registerAsync 同步或者异步注册。
  2. register 时可以传入 delegate,针对自身业务实现注册,比如某些 Receiver 需要改成本地注册的。
  3. 当一个 Receiver 中的 Action 既有白名单 Action,又有黑名单 Action 时,Android 8.0 依然会注册 Receiver 只不过 黑名单 Action 不会触发。这样的话内存中将会有两个有效的 Receiver 实例,这点需要注意。但是白名单 Action 不会被动态注册。

猜你喜欢

转载自blog.csdn.net/ganyao939543405/article/details/76896157