如何防止系统终止我的'前台'服务?
我正在构建一个类似于Runtastic/Endomondo/Strava的应用程序,它需要获取GPS位置的服务,直到用户停止它的显示。如何防止系统终止我的'前台'服务?
我跑Runtastic和我的应用程序来尝试它。 Runtastic很好。但是我的应用程序丢失了通知在状态栏中的所有数据。我认为服务会自行重启,或者Android会终止我的服务。
我在LG G3上测试了应用程序,配备2GB内存,我认为它足够运行Runtastic和我的应用程序。
所以,我的问题是¿保持服务在后台运行,或避免系统杀死它的最佳方式是什么?我想模仿Runtastic/Endomondo/Strava的逻辑。这意味着,电池寿命并不重要。
我试着
START_STICKY
标志启动该服务的方法onStartCommand
。我试图用
startForeground
方法来启动服务我已经试过AQUIRE一个
WakeLock
继文档(https://developer.android.com/guide/topics/processes/process-lifecycle.html)我的服务应该是 'A可见的过程'。
这里是我服务的代码要点:https://gist.github.com/cpalosrejano/cc1ab73c4819c3e84234f2d619421b93
¿我应该声明服务作为的Manifest.xml过程?
保持服务在后台运行或避免系统死机的最佳方式是什么?
你不知道。前台服务是最好的,你可以得到。
但我的应用程序,失去altought通知所有的数据是在状态栏尚未
您的数据保存到数据库中,SharedPreferences
,文件或服务器。一个进程不是一个持久的数据存储。
当用户停止服务时,我已经将数据保存在数据库中。主要的问题是服务被系统杀死,导致在用户停止显式服务之前丢失了我的服务的所有变量。所以,我需要保持服务清醒,直到用户决定停止服务。 – cpalosrejano
@cpalosrejano:“当用户停止服务时,我已经将数据保存在数据库中了” - 这太迟了。数据更改时可能保存数据,可能是批量。 “我需要保持服务清醒,直到用户决定停止服务” - 不,您需要在数据更改时保存数据。 – CommonsWare
所以,前台服务是我能得到的最好的服务。这确保了服务不会在系统运行在低内存时被杀死,不是吗?如果是这样,我应该避免在我的服务上保存变量,以避免消耗内存。谢谢! – cpalosrejano
'startForeground'应该做的诀窍,如果你正确实施它 –
@VladMatvienko我已经使用它。但我的服务被系统杀死。请你可以看看要点吗?也许我犯了一个错误。不管怎么说,还是要谢谢你! – cpalosrejano
好吧,它不显示你如何开始你的服务 –