我的安卓服务突然停止,并创建了一个新服务



我有一个非常简单的Android GPS记录应用程序,可以运行服务。活动只不过是用于控制服务的启动/停止按钮。单击按钮后,我启动一个新的后台服务(带有START_STICKY(。然后我关闭活动,服务正常运行。我可以再次运行该应用程序以停止该服务。

该服务只是将GPS坐标记录到文件中。我正在记录每个方法和异常捕获。在某些时候,可能是几分钟或几小时,我的服务将停止,但不会调用 onDestroy,也不会引发异常。日志只是显示我上次的文件写入工作,然后什么都没有。我怀疑GC正在杀死它,但我认为START_STICKY基本上意味着"请尽可能长时间地运行我"。30 秒后,启动服务的新副本(不同的 PID(,onCreate 和 onStartService 像往常一样被调用。

如果/当服务终止其父活动或应用程序时,Android 会终止服务吗?是否有必要在单独的线程中运行服务以防止这种情况?为什么完整的服务生命周期不会完成(不调用onDestroy(?

服务实际上是在主线程中运行的,如果您执行可能需要一些时间的工作,则应创建一个新线程。如果您使用IntentService而不是常规服务,Android可以为您执行此操作。

我应该补充一点,Android 将杀死一个占用主线程超过 5(?s.锁定主线程将导致 ANR(应用程序无响应(,也许这就是您在服务中遇到的。

Android 不会在后台服务的父活动关闭时终止后台服务。但是当设备屏幕锁定时,它会暂停后台作业。您的问题可能与此有关。当屏幕再次解锁时,该服务应从其离开的位置继续其工作。

相关内容

最新更新