我有一个非常简单的Android GPS日志记录应用程序来运行服务。 Activity只是一个控制服务的开始/停止按钮。单击按钮,我启动一个新的后台服务(使用START_STICKY)。然后我关闭Activity并且服务正常运行。我可以再次运行应用程序来停止服务。
该服务只是将GPS坐标记录到文件中。我正在登录每个方法和异常捕获。在某些时候,可能是几分钟或几小时,我的服务将停止,但不会调用onDestroy并且不会抛出任何异常。日志只是显示我的上一个文件写入工作,然后没有。我怀疑GC正在杀死它,但我认为START_STICKY基本上意味着“请尽可能地让我跑”。 30秒后,启动服务的新副本(不同的PID),onCreate和onStartService将照常调用。
如果/当它杀死其父活动或应用程序时Android会杀死它吗?是否有必要在单独的线程中运行该服务以防止这种情况?为什么整个服务生命周期没有完成(没有调用onDestroy)?
答案 0 :(得分:0)
服务实际上是在主线程中运行,如果你的工作可能需要一些时间,你应该创建一个新线程。如果您使用IntentService而不是常规服务,Android可以为您执行此操作。
我应该补充一点,Android会杀死占用主线程超过5(?)s的进程。锁定主线程将导致ANR(应用程序无响应),这可能是您在服务中遇到的。
答案 1 :(得分:0)
Android在父活动关闭时不会终止后台服务。但是当设备屏幕被锁定时,它会暂停后台作业。您的问题可能与此有关。当屏幕再次解锁时,服务预计将从它离开的地方继续工作。