我有一个非常简单的 Android GPS 记录应用程序,它运行一个服务。 Activity只不过是控制服务的启动/停止按钮。单击按钮后,我启动一个新的后台服务(使用 START_STICKY)。然后我关闭活动,服务正常运行。我可以再次运行应用程序来停止服务。
该服务只是将 GPS 坐标记录到文件中。我正在记录每个方法和异常捕获。在某个时刻,可能是几分钟或几小时,我的服务将停止,但 onDestroy 不会被调用,也不会引发异常。日志只是显示我上次的文件写入工作正常,然后什么也没有。我怀疑 GC 正在杀死它,但我认为 START_STICKY 基本上意味着“请尽可能长时间地运行我”。 30秒后,服务的新副本启动(不同的PID),onCreate和onStartService照常调用。
如果/当 Android 终止其父 Activity 或应用程序时,它会终止服务吗?是否有必要在单独的线程中运行服务来防止这种情况?为什么完整的服务生命周期没有完成(onDestroy 没有被调用)?
服务实际上在主线程中运行,如果您所做的工作可能需要一些时间,您应该创建一个新线程。如果您使用意向服务 http://developer.android.com/guide/topics/fundamentals/services.html#ExtendingIntentService而不是常规服务。
我应该补充一点,Android 会杀死占用主线程超过 5(?)s 的进程。锁定主线程会导致 ANR(应用程序未响应),也许这就是您在 Service 中遇到的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)