对于Android 10及以上版本,应使用系统提供的“前台服务”机制,通过将应用程序状态提升为前台服务,从而达到避免被杀死的目的。具体代码示例如下:
// AndroidManifest.xml
// CustomService.java public class CustomService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { Notification notification = createNotification(); startForeground(NOTIFICATION_ID, notification); // do your work here return START_STICKY; }
private Notification createNotification() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_notification)
.setPriority(NotificationCompat.PRIORITY_LOW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(CHANNEL_ID);
}
return builder.build();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在AndroidManifest.xml中,我们定义了CustomService来实现应用程序状态提升的前台服务机制,并通过android:foregroundServiceType属性指定了服务类型。在CustomService中,我们通过createNotification()方法创建通知来标记前台服务,并通过startForeground()方法启动前台服务,然后在onStartCommand()方法中执行我们自己的业务逻辑。需要注意的是,startForeground()方法必须在5秒之内调用,否则将引发ANR异常。最后,我们需要返回START_STICKY以确保服务在因系统资源不足而被杀死后能够自动重启。