1

我正在构建一个类似于 Runtastic/Endomondo/Strava 的应用程序,它需要一个服务来获取 GPS 位置,直到用户明确地停止它。

我运行了 Runtastic 和我的应用程序来尝试它。Runtastic 运行良好。但是我的应用程序丢失了所有数据,尽管通知还在状态栏中。我认为服务会自行重启,或者 Android 会杀死我的服务。

我在具有 2GB RAM 的 LG G3 中测试了该应用程序,我认为它足以运行 Runtastic 和我的应用程序。

所以,我的问题是¿保持服务在后台运行或避免系统杀死它的最佳方法是什么?我想模仿 Runtastic/Endomondo/Strava 的逻辑。这意味着,电池寿命无关紧要。

  • 我试过用START_STICKY方法上的标志启动服务onStartCommand

  • 我试图用startForeground方法启动服务

  • 我试过获取一个WakeLock

按照文档(https://developer.android.com/guide/topics/processes/process-lifecycle.html),我的服务应该是“一个可见的过程”。

这是我的服务代码的要点:https ://gist.github.com/cpalosrejano/cc1ab73c4819c3e84234f2d619421b93

¿ 我应该在 Manifest.xml 中将服务声明为进程吗?

4

1 回答 1

2

保持服务在后台运行或避免系统杀死它的最佳方法是什么?

你没有。前台服务是您可以获得的最佳服务。

但是我的应用程序丢失了所有数据,尽管通知还在状态栏中

将数据保存到数据库SharedPreferences、文件或服务器。进程不是持久数据存储。

于 2017-04-05T12:27:48.817 回答