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;
}