使用服务强制关闭应用程序:onDestroy()在服务中没有被调用?

时间:2011-07-01 22:52:36

标签: android

我已经实现了一个粘性服务,当我强制关闭应用程序时,我看到调用了Activity的onDestroy()。但该服务显然没有做任何事情。


这里是logcat:

07-01 22:35:30.397: DEBUG/ActivityMine(6505): onDestroy()

07-01 22:35:32.667: INFO/ActivityManager(71): Force stopping package my.large.package uid=10036

07-01 22:35:32.667: WARN/ActivityManager(71): Scheduling restart of crashed service my.large.package/.service.ServiceCommunicator in 5000ms

07-01 22:35:32.667: INFO/Process(71): Sending signal. PID: 6505 SIG: 9

07-01 22:35:32.687: INFO/ActivityManager(71):   Force stopping service ServiceRecord{451f65b8 my.large.package/.service.ServiceCommunicator}

如您所见,ServiceCommunicator()不会调用:stopService(),finalize()或onDestroy()! 我把Log调用放在了所有3个中。

我怎么知道服务何时被强制关闭?我需要捕获该事件,以便我可以关闭文件。

3 个答案:

答案 0 :(得分:9)

  

我怎么知道服务何时被强制关闭?

你没有。不保证在任何组件上调用onDestroy()

  

我需要捕获该事件,以便我可以关闭文件。

然后不要让它们打开。

答案 1 :(得分:0)

期待服务被强制关闭对我来说似乎有点奇怪。 无论如何,如果进程终止,我希望linux子系统能够关闭任何打开的文件句柄。

同样如CommonsWare onDestroy所述,无论如何都不能保证。

答案 2 :(得分:-1)

情况更糟。 onDestroy只在模拟器环境中调用(用于测试),但从不在真正的手机上调用....

正如@mibollmba所说 - 文件将在进程终止时关闭。无需处理文件关闭。