3

我的 Android 应用程序中有一项服务需要在用户退出应用程序后继续侦听位置更新(这对电池寿命的影响是另一回事)。

我不确定我是否正确理解了此页面上概述的 Android 服务的生命周期:

http://developer.android.com/reference/android/app/Service.html

我相信如果它在 onStart() 方法中返回 START_STICKY ,那么服务将在主应用程序退出后继续运行,无论服务是否在自己的进程中运行。如果该服务与应用程序的其余部分在同一进程中运行并且我理解正确,则主应用程序的进程在应用程序退出后保持活动状态,只是为了运行该服务。当应用程序再次启动时,它将与仍在运行的服务在同一进程中运行。如果系统内存不足,Android 可能会决定终止该服务。

其次,我相信可以在与应用程序的其余部分相同的进程和相同的线程中运行位置监听器来监听 GPS 更新,并且在等待来自 GPS 的更新时它不会阻塞。

我理解正确了吗?

4

2 回答 2

4

你已经正确理解了。

如果系统内存不足,Android 可能会决定终止该服务。

如果您希望它是持久的,您可以创建持久服务(但它需要是系统应用程序/服务)。

请使用 AlarmManager 和 IntentService,因此您的服务不需要在内存中,除非它正在做有意义的工作。这也意味着 Android 不太可能在您在内存中时终止您的服务,并且用户不太可能因为认为您在浪费内存而终止您的服务。

对于您的位置监听器:

使用在服务中实现的位置侦听器。

服务启动时开始监听 GPS,服务停止时移除 GPS 监听器。

当您想收听 GPS 时(例如每 10 分钟)启动此服务。

这比您尝试连续运行并检查位置更改的服务更干净。

其次,我相信可以在与应用程序的其余部分相同的进程和相同的线程中运行位置监听器来监听 GPS 更新,并且在等待来自 GPS 的更新时它不会阻塞。

您不需要为此设置 AsyncTask 或后台线程。也理解正确。

于 2013-02-12T15:14:07.507 回答
1

Service 的实际生命周期在这里通过图片来描述。如果始终像这样,您可以在生命周期中运行 android 中的任何服务。

在此处输入图像描述

于 2015-04-30T07:28:46.627 回答