我已经实现了一个粘性服务,当我强制关闭应用程序时,我看到调用了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个中。
我怎么知道服务何时被强制关闭?我需要捕获该事件,以便我可以关闭文件。
答案 0 :(得分:9)
我怎么知道服务何时被强制关闭?
你没有。不保证在任何组件上调用onDestroy()
。
我需要捕获该事件,以便我可以关闭文件。
然后不要让它们打开。
答案 1 :(得分:0)
期待服务被强制关闭对我来说似乎有点奇怪。 无论如何,如果进程终止,我希望linux子系统能够关闭任何打开的文件句柄。
同样如CommonsWare onDestroy所述,无论如何都不能保证。
答案 2 :(得分:-1)
情况更糟。 onDestroy只在模拟器环境中调用(用于测试),但从不在真正的手机上调用....
正如@mibollmba所说 - 文件将在进程终止时关闭。无需处理文件关闭。