我有一个定位服务,我想在应用程序处于前台或后台时始终运行,但是在应用程序关闭(从应用程序托盘中删除)时停止运行。
我的解决方案是使用START_NOT_STICKY
启动服务,这似乎可行,但是我对服务文档中有关此命令的内容感到担忧
START_NOT_STICKY说,从onStartCreated()返回后,如果进程被杀死而没有剩余的启动命令要交付,则该服务将停止而不是重新启动。对于仅在执行发送给它们的命令时运行的服务,这更有意义。例如,可以每15分钟从警报启动一项服务以轮询某些网络状态。如果在执行此操作时将其杀死,最好是将其停止并在下次警报响起时启动。
因此,似乎在内存不足时Android可能会终止服务,并且如果使用START_NOT_STICKY
,服务将不会重新启动。
我尝试使用START_STICKY
,但这即使关闭了应用程序也能保持服务运行。
我应该怎么做才能使服务始终在前台或后台运行,并在关闭后停止运行,而又不必担心Android在运行时终止它?
请在此处输入代码
@Override
public int onStartCommand(Intent intent, int flags, int startId){
if (intent != null) {
extras = intent.getExtras();
// takes the messenger object and makes it local so when the messagereceiver sends an intent here, it won't overwrite the extras object
// and get rid of the messenger. Otherwise, getting an update from the notification controls would null out the messenger object
if (intent.hasExtra("MESSENGER")) {
Timber.e("MESSENGER ");
messenger = (Messenger) extras.get("MESSENGER");
}
}
return START_NOT_STICKY;
}
答案 0 :(得分:1)
我应该怎么做才能使服务始终在前台或后台运行,并在关闭后停止运行,而又不必担心Android在运行时终止它?
我不确定您指的是什么“应用程序托盘”,或者“封闭”到底是什么意思(Android应用程序本身不是“封闭”的东西。
但是,根据您的描述,我认为您想做类似的事情:
如果这不能解决您的问题,请详细说明您的用例以及为什么要这样做。我或其他人也许可以提供更多/更好/替代性建议,其中包含有关您最终实际要实现的目标的更多细节。
希望有帮助!