0

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

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

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

4

2 回答 2

0

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

我应该补充一点,Android 会杀死一个占用主线程超过 5(?) 秒的进程。锁定主线程会导致 ANR(Application Not Responding),也许这就是您在 Service 中遇到的情况。

于 2012-05-08T21:12:41.620 回答
0

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

于 2012-05-08T21:22:59.537 回答