根据操作,使用START_STICKY和START_REDELIVER_INTENT可以混合使用服务返回类型吗?

时间:2017-05-19 21:44:37

标签: android android-service

onStartCommand()可以根据动作混合返回类型吗?例如,一个以START_STICKY开始的服务,但始终会重新传递第一个意图以维持状态。

当初始意图包含不容易持久存在的内容(例如PendingIntent)时,这将特别有用。

它似乎有效,但我无法找到文档,我担心会出现意外行为。文档确实建议使用START_REDELIVER_INTENT的服务可能不会像使用START_STICKY一样运行,但有点不清楚。

  

START_STICKY用于明确启动的服务   根据需要停止,同时START_NOT_STICKY或START_REDELIVER_INTENT   用于仅在处理时保持运行的服务   发送给他们的任何命令

以下是一个服务示例,该服务可以处理各种请求而不提供初始状态,但确保其可用。

private PendingIntent pendingIntent;
private Config config;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null) {
        switch (intent.getAction()) {

            case ACTION_START:
                // save state
                config = intent.getParcelableExtra("config");
                pendingIntent = intent.getParcelableExtra("pendingIntent");
                return START_REDELIVER_INTENT;

            case ACTION_STOP:
                stopSelf();
                return START_NOT_STICKY;

            case ACTION_SOME_TASK:
                // caller does not have state but it needs to be loaded here
                doSomething();
                break;

            case ACTION_SOME_OTHER_TASK:
                doSomethingElse();
                break;
        }
    }
    return START_STICKY;
}

0 个答案:

没有答案