【发布时间】:2017-04-05 11:51:19
【问题描述】:
我正在构建一个类似于 Runtastic/Endomondo/Strava 的应用程序,它需要一个服务来获取 GPS 位置,直到用户明确停止它。
我运行 Runtastic 和我的应用来尝试一下。 Runtastic 运行良好。但是我的应用程序丢失了所有数据,尽管通知还在状态栏中。我认为服务会自行重启,或者 Android 会杀死我的服务。
我在具有 2GB RAM 的 LG G3 上测试了该应用程序,我认为它足以运行 Runtastic 和我的应用程序。
所以,我的问题是¿保持服务在后台运行或避免系统杀死它的最佳方法是什么?我想模拟 Runtastic/Endomondo/Strava 的逻辑。这意味着,电池寿命无关紧要。
我已尝试在方法
onStartCommand上使用START_STICKY标志启动服务。我尝试使用
startForeground方法启动服务我已尝试获取
WakeLock
按照文档 (https://developer.android.com/guide/topics/processes/process-lifecycle.html),我的服务应该是“一个可见的过程”。
这是我的服务代码的要点:https://gist.github.com/cpalosrejano/cc1ab73c4819c3e84234f2d619421b93
¿我应该在 Manifest.xml 中将服务声明为进程吗?
【问题讨论】:
-
startForeground如果您正确实施它应该可以解决问题 -
@VladMatvienko 我已经在使用它了。但是我的服务被系统杀死了。请你看一下要点吗?也许我犯了一个错误。还是谢谢!
-
好的,它没有显示你如何启动你的服务
-
@VladMatvienko 我很抱歉。我只是添加了 FragmentMain 代码,我在其中启动服务。
标签: android service process kill foreground-service