近期做项目的时候发现一个问题,我项目的app先前是跑在Android 6.0系统上的,静态广播能正常接收没问题,移植到Android 7.0 系统上广播也没问题也能正常接收,但是到了Android 8.0的系统之后,发现广播失效,怎么都接收不了广播,于是疯狂的找度娘,然后又看了一下Android 8.0的api,才知道原因:在Android 8.0系统上,为了提高电池续航时间,提高设备性能,系统会限制未在前台运行的应用的某些行为,如:
-
在后台运行的应用对后台服务的访问受到限制
-
应用无法使用其清单注册大部分隐式广播(即并非专门针对次应用的广播)
对广播的限制具体可以查看一下Android 8.0 API 介绍 https://developer.android.google.cn/about/versions/oreo/background
解决方法:
- 尽量使用动态广播代替静态广播
- 如果动态广播不能满足你的需求,必须要使用静态广播的话,那么就得在 Intent 中设置参数 Component参数,然后其他注册广播的步骤和原来在 Android 6.0 系统以下注册的方法一样。
举个栗子: