我的Android应用程序中有一项服务需要在用户退出应用程序后继续侦听位置更新(这对电池寿命的影响是另外一个问题)。
我不确定我是否已正确理解Android中服务的生命周期,本页概述:
http://developer.android.com/reference/android/app/Service.html
我相信如果它在onStart()方法中返回START_STICKY,那么无论服务是否在自己的进程中运行,服务将在主应用程序退出后继续运行。如果服务在与应用程序的其余部分相同的进程中运行并且我已经正确理解,则应用程序退出后主应用程序的进程将保持活动状态,只是为了运行该服务。当应用程序再次启动时,它将在与仍在运行的服务相同的进程中运行。如果系统内存不足,Android可能会决定终止此服务。
其次,我相信可以在相同的进程中运行位置监听器来监听GPS更新,并且实际上与应用程序的其余部分相同,并且在等待来自GPS的更新时它不会阻塞。
我理解正确吗?
答案 0 :(得分:4)
你已经理解正确。
如果系统内存不足,Android可能会决定终止此服务。
如果您希望它是持久的,您可以创建持久性服务(但它必须是系统应用程序/服务)。
请使用AlarmManager和IntentService,因此您的服务不需要在内存中,除非它正在执行有意义的工作。 这也意味着当您在内存中时,Android不太可能会终止您的服务,并且用户不太可能因为他们认为您在浪费内存而终止您的服务。
为您的位置听众:
使用服务中实施的位置监听器。
在服务启动时开始收听GPS,并在服务停止时移除GPS收听者。
如果您想收听GPS(例如每10分钟一次),请启动此服务。
这比您尝试连续运行并检查位置更改的服务更清晰。
其次,我认为运行位置监听器可以在同一进程中监听GPS更新,并且实际上与应用程序的其余部分相同,并且在等待来自应用程序的更新时不会阻止全球定位系统。强> 的
您无需为此设置AsyncTask或后台线程。也正确理解。
答案 1 :(得分:0)
此处按图像描述服务的实际生命周期。如果总是这样,你可以在android生命周期中运行任何服务。