我必须确保我的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
但根据文档,你似乎只能使用其中一个标志(也许我错了?)。
那么可以以某种方式开始以我描述的方式工作的服务吗?
答案 0 :(得分:4)
您无法返回多个值。相反,我建议您在START_STICKY
中返回onStartCommand
标记。但这是第一次将意图捆绑的必要值保存在SharedPreference
存储中。下次,当您重新调用onStartCommand
(从低内存或任何原因恢复后)并且发现 null 时,只需从首选项加载值并继续随心所欲。
答案 1 :(得分:1)
我记得START_STICKY
和START_FLAG_REDELIVERY
之间的差异只是它会以零意图或再次使用相同的意图重新传递。这就是你想要编程的方式。你应该只返回一个标志,因为它们是不同的操作模式。