9

我知道服务的 onDestroy() 方法可能永远不会被调用,但有人可以告诉我什么时候可能会发生这种情况吗?我特别感兴趣的是服务是否有可能被杀死,但它的 VM 会继续运行。

我问是因为我有一个服务,它在服务的 onStartCommand() 方法中注册 ContentObservers 并在 onDestroy() 中取消注册它们。如果服务的 onDestroy() 方法因为整个 VM 被杀死(连同它创建的观察者)而从未被调用,那很好。但我想知道服务是否有可能在不调用 onDestroy() 的情况下“消失”,而它创建的观察者将继续存在并继续接收更改。

4

2 回答 2

11

我知道服务的 onDestroy() 方法可能永远不会被调用,但有人可以告诉我什么时候可能会发生这种情况吗?

以下是我脑海中浮现的三个:

  • 如果用户从“设置”应用中强制阻止您

  • 如果 Android 急需 RAM(例如,处理来电)并选择终止您的进程以释放 RAM

  • 您从 DDMS 终止进程

此外,如果您的服务因某处未处理的异常而崩溃,Android 可能会认为该服务已失效并跳过onDestroy()。我不确定这个,因为我没有专门尝试过。

但我想知道服务是否有可能在不调用 onDestroy() 的情况下“消失”,而它创建的观察者将继续存在并继续接收更改。

除了我上面提到的未处理异常的可能性之外,我有理由确定如果该进程将在onDestroy()未调用的条件下终止。

于 2013-01-03T21:57:30.270 回答
2

此外,如果应用程序被重新安装/更新,则永远不会调用 ondestroy()。

于 2014-02-14T21:55:38.910 回答