Service.onStartCommand() - 是否可以返回多个标志?

时间:2012-10-12 09:59:21

标签: android service low-memory

我必须确保我的Service会一直运行,直到我明确地呼叫stopService()。 所以我应该从onStartCommand() START_STICKY标志返回。

我也希望如果我的服务将被系统销毁,因为内存不足,当系统重新创建它时,onStartCommand()将以最初启动服务的相同意图被调用。 因为这个原因 - 我想使用START_FLAG_REDELIVERY标志。 根据文档 - http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle

,我所描述的肯定会发生(实际上发生在我的身上)

我知道我可以使用startForground()启动服务,这可以防止服务在内存不足时被系统杀死,但我不想使用这种方法,无论如何 - 根据文档:系统仍然可以在极低的内存压力下杀死它。

如果我可以从onStartCommand()返回,那将是完美的 START_STICKY|START_FLAG_REDELIVERY

但根据文档,你似乎只能使用其中一个标志(也许我错了?)。

那么可以以某种方式开始以我描述的方式工作的服务吗?

2 个答案:

答案 0 :(得分:4)

您无法返回多个值。相反,我建议您在START_STICKY中返回onStartCommand标记。但这是第一次将意图捆绑的必要值保存在SharedPreference存储中。下次,当您重新调用onStartCommand(从低内存或任何原因恢复后)并且发现 null 时,只需从首选项加载值并继续随心所欲。

答案 1 :(得分:1)

我记得START_STICKYSTART_FLAG_REDELIVERY之间的差异只是它会以零意图或再次使用相同的意图重新传递。这就是你想要编程的方式。你应该只返回一个标志,因为它们是不同的操作模式。