Android9.0以上版本后台进程启动后台服务
时间: 2023-09-09 10:05:45 浏览: 225
泛微协同办公平台E-cology9.0版本后台维护手册(X)--建模引擎
在 Android 9.0 及以上版本,为了进一步增强应用程序的安全性,Android 引入了更严格的后台限制,禁止所有未在前台运行的应用程序启动服务。如果您想在后台启动服务,需要使用 `startForegroundService()` 方法,并且需要在 5 秒钟内调用 `startForeground()` 方法将服务设置为前台服务。
以下是一个使用 `startForegroundService()` 和 `startForeground()` 的示例代码:
```
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 创建一个 NotificationChannel
NotificationChannel channel = new NotificationChannel("channel_id", "channel_name", NotificationManager.IMPORTANCE_DEFAULT);
// 向系统注册 NotificationChannel
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
// 创建一个 Intent,启动你的服务
Intent serviceIntent = new Intent(this, YourService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 在 Android 9.0 及以上版本上,需要调用 startForegroundService() 方法启动服务。
startForegroundService(serviceIntent);
// 在启动服务后,5 秒钟内调用 startForeground() 方法将服务设置为前台服务。
// 如果在 5 秒钟内没有调用 startForeground() 方法,系统会认为服务无法正常启动,会抛出异常。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startForeground(1, new Notification());
}
}, 5000);
} else {
// 在 Android 9.0 以下版本上,可以直接调用 startService() 方法启动服务。
startService(serviceIntent);
}
```
注意:在 Android 9.0 及以上版本上,如果你使用的是 `startForeground()` 方法,会在 5 秒钟后抛出 `ANR` 异常,因为 Android 9.0 及以上版本要求服务必须在 5 秒钟内设置为前台服务。如果你想在后台运行服务,必须使用 `startForegroundService()` 和 `startForeground()` 方法。
阅读全文