IntentService 设为前台服务

一般来说 IntentService 仅用于处理一些简短的任务,执行完成后就自行销毁了。一般没有设为前台服务的需求,本研究只是为了一个场景:应用 crash 时启动服务收集日志,为了提高服务的优先级设为前台服务。

因 android 8.0+ 、9.0 服务行为的变更。将服务于设为前台需要如下兼容给处理:
1. 原来 startService()需要根据 sdk 版本进行兼容

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    context.startForegroundService(intent);
} else {
    context.startService(intent);
}

IntentService 代码:

public class ForegroundService extends IntentService {
    private static final String TAG = "FrgrndSrv";
    public ForegroundService() {
        super(TAG);
    }
    @Override
    protected void onHandleIntent(Intent intent) {
        Notification.Builder builder = 。。。//根据兼容性创建Notification.Builder 
        startForeground(1, builder.build());   //此处调用startForeground
        try {
            doSomeWork();     
        } finally {
            stopForeground(true);
        }
    }
    protected void doSomeWork() {
       //执行任务
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}