关于 Android O
不出意外,为了控制 App 自动唤醒,Google 在新系统中又一次严格控制了 App 的后台行为,这一次在 Menifest 中注册的广播 Action 大部分都失效了。
为了方便在 8.0 上继续使用 Menifest 注册 Receiver,只能手动解析 Menifest 转为动态注册。所以顺手写了这么一个工具。 github
使用
- 导入项目中的 registerLib 模块。
- 在 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 添加白名单,注意要在注册之前调用。
其他
- 可以使用 register 或者 registerAsync 同步或者异步注册。
- register 时可以传入 delegate,针对自身业务实现注册,比如某些 Receiver 需要改成本地注册的。
- 当一个 Receiver 中的 Action 既有白名单 Action,又有黑名单 Action 时,Android 8.0 依然会注册 Receiver 只不过 黑名单 Action 不会触发。这样的话内存中将会有两个有效的 Receiver 实例,这点需要注意。但是白名单 Action 不会被动态注册。
作者:ganyao939543405 发表于2017/8/8 13:05:39 原文链接
阅读:70 评论:0 查看评论