新的 Service 运行管制
安卓系统从 7.0 开始 (包括 Nougat、Oreo) 慢慢的对后台服务实行了标准的管制。这个设计的出发点是为了更省电,从而带给用户更好的体验。我就在这里很简短的和大家重温怎样在 Nougat,Oreo 以上版本正确地持续的跑后台服务。一些合理的用例包括了维持与服务器的长链接、播放音乐等。
有两个方法。
1. 利用前台服务 Foreground Service
Foreground Service 被认为是用户主动意识到的一种服务。因此,系统会透过通知兰清楚地提醒用户 Service 正在运行。
代码片段
// 这是必须提供的通知.
Notification notification = newNotification(
R.drawable.icon,getText(R.string.ticker_text),
System.currentTimeMillis());Intent notificationIntent = newIntent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent,0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
getText(R.string.notification_message),pendingIntent);startForeground(ONGOING_NOTIFICATION_ID, notification);
2. 把 APP 加入电池优化豁免白名单
在安卓 7.0 或以上,系统添加了一个叫电池优化的配置。用户可以选择性的把 APP 加入其白名单。很明显,如果用户极端地把很多的 APP 加入其白名单,就会弄巧成拙。APP 可以用以下的代码片段来唤起这个配置的界面。但最终确定权还是在用户的手里。为了尊重用户免得让他们受到不必要的打扰,请谨慎使用这个功能。
AndroidManifest.xml
<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
代码片段
startActivity(new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
Uri.parse("package:" + getPackageName()));
网友评论