android - Android 中的服务生命周期

标签 android gps

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

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

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

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

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

我的理解正确吗?

最佳答案

您理解正确。

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

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

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

对于您的位置听众:

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

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

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

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

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

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

关于android - Android 中的服务生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835563/

相关文章:

android - Android Studio 中的描述性构建变体名称

android - 如何向存储访问框架表明我不再需要加载动画?

ios - 检查用户位置是否靠近某些点

python - 当另一个程序正在使用串行端口时,我如何连接并向串行端口发送命令?

android - 如何从 GPS 设置窗口返回到我的 Activity

android - 反向地理定位

android - Flutter 可以允许访问本地代码中的小部件吗?

Android OpenGL 3D采摘

javascript - 哪些设备支持通过 navigator.geolocation 进行 Javascript 地理定位?

javascript - 使用 CSS 的绝对大小