Android onStartCommand标志

Android onStartCommand标志,android,service,Android,Service,我有一个简单的服务: public class TestService extends Service { final String LOG_TAG = "myLogs"; public void onCreate() { super.onCreate(); Log.d(LOG_TAG, "TestService onCreate"); } public void onDestroy() { super.onDestroy(); Log.d(LOG_TAG,

我有一个简单的服务:

public class TestService extends Service {

final String LOG_TAG = "myLogs";

public void onCreate() {
    super.onCreate();
    Log.d(LOG_TAG, "TestService onCreate");
}

public void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "TestService onDestroy");
}

public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(LOG_TAG, "TestService onStartCommand")
    readFlags(flags);
    MyRun mr = new MyRun(startId);
    new Thread(mr).start();
    return START_REDELIVER_INTENT;
}

public IBinder onBind(Intent arg0) {
    return null;
}

void readFlags(int flags) {
    switch (flags) {
        case START_FLAG_REDELIVERY:
            Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
            break;
        case START_FLAG_RETRY:
            Log.d(LOG_TAG, "START_FLAG_RETRY");
            break;
        default:
            Log.d(LOG_TAG, "Flag: " + flags);
    }
}

class MyRun implements Runnable {

    int startId;

    public MyRun(int startId) {
        this.startId = startId;
        Log.d(LOG_TAG, "Run#" + startId + " create");
    }

    public void run() {
        Log.d(LOG_TAG, "Run#" + startId + " start");
        try {
            TimeUnit.SECONDS.sleep(15);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        stop();
    }

    void stop() {
        Log.d(LOG_TAG, "Run#" + startId + " end, stopSelfResult("
                + startId + ") = " + stopSelfResult(startId));
    }
}
如果我理解正确,flagSTART\u REDELIVER\u INTENT应该尽快重新启动我的服务,因为有足够的可用内存。 但是(我已经在3个设备(4.1.2、4.4.2和6.0.1)上检查过了)当我终止该进程时,服务只在其中1个设备(4.1.2)上重新启动:

另外两台设备有什么问题? 其他标志也存在同样的问题,例如,开始\u STICKY-服务过程将永久终止。

覆盖
onLowMemory()
方法并将Log.d标记也放在那里,它将告诉您操作系统何时会在资源紧张时尝试停止服务

START\u REDELIVER\u INTENT
-通知系统在崩溃后重新启动服务,并重新提交崩溃时存在的意图。崩溃可能是因为资源不足


如果没有发生资源短缺,操作系统将不会停止您的活动。

这些设备的品牌和型号是什么?一些制造商已经设置了限制,不让服务留在后台,比如华为
 D/myLogs: TestService onCreate
 D/myLogs: TestService onStartCommand
 D/myLogs: START_FLAG_REDELIVERY
 D/myLogs: MyRun#1 create
 D/myLogs: MyRun#1 start
 D/myLogs: MyService onDestroy
 D/myLogs: MyRun#1 end, stopSelfResult(1) = true