Android 最近几版的特色主要集中在省电和后台管理上,O的发布,对Service和Broadcast又近一步加强了管束。主要可概括为如下两点:
1、后台应用不被允许创建后台服务,必须通过JobScheduler或者Context.startForegroundService()进行创建
2、特定的隐式广播不再被允许启动,必须通过JobScheduler调用或者显式注册的方式才能启动
google之所以限制隐式广播,是因为广播的滥用导致设备在息屏等状态下,依然无法有效的做到省电,往往一个系统广播,会唤醒多个未启动的第三方应用。因此在O中,隐式广播的限制是很严厉的。谷歌给出了允许隐式注册的广播列表https://developer.android.com/preview/features/background-broadcasts.html,为了方便懒得上墙的小伙伴们,贴出整理的广播列表:
开机广播,之所以被允许,因为每次设备启动只会发送一次
1、ACTION_LOCKED_BOOT_COMPLETED(直接启动模式下才会发出)
2、ACTION_BOOT_COMPLETED
以下三个广播有权限限制,一般应用无法接受。
3、ACTION_USER_INITIALIZE
4、android.intent.action.USER_ADDED
5、android.intent.action.USER_REMOVED
地区变更广播,这个地区指的是国家一级,一般不会发送
6、ACTION_LOCALE_CHANGED
7、
时区闹钟变更相关的广播,一般时间类APP需要
7、ACTION_TIMEZONE_CHANGED
8、ACTION_NEXT_ALARM_CLOCK_CHANGED
9、android.intent.action.TIME_SET
usb事件广播,需要设备触发usb事件才能发送
10、ACTION_USB_ACCESSORY_ATTACHED
11、ACTION_USB_ACCESSORY_DETACHED
12、ACTION_USB_DEVICE_ATTACHED
13、ACTION_USB_DEVICE_DETACHED
蓝牙事件广播,需要设备触发蓝牙事件才能发送
14、ACTION_CONNECTION_STATE_CHANGED
15、ACTION_ACL_CONNECTED
16、ACTION_ACL_DISCONNECTED
OEM相关的广播,一般是OEM通讯类应用会需要
17、ACTION_CARRIER_CONFIG_CHANGED
18、TelephoneyIntents.ACTION_*_SUB