是一个android服务保证调用onDestroy()?

android上一个Activity的生命周期图并不能保证会调用onDestroy(),但是这个过程可能会被终止并且Activity会被突然删除。 android上的Service的生命周期图确实保证了onDestroy()被调用。 所以我有两个关于这个区别的问题。

首先,如果服务是与Activity相同的进程的一部分,那么是调用Service onDestroy(),尽pipeActivity onDestroy()不被调用? 我不认为,“杀死一个进程”表明操作系统正在停止线程并释放资源。

如果是这样的话,操作系统会突然杀死一个仅服务进程吗?

我不知道你在哪里看到一个服务保证有onDestroy()调用。 据我所知,情况并非如此。 如果你阅读这个文档的页面,它描述了一个服务可能被杀死的条件。 所以,如果你问是否有一个进程同时承载一个活动和服务被杀死,将onDestroy()调用服务(但不是在活动),那么答案是否定的; 一个服务的onDestroy()不一定会被调用。 至于是否可以通过操作系统突然杀死一个仅服务进程:是的,可以。 当你有很多工作要做时,尤其如此,你的onStartCommand调用只会使工作asynchronous排队。 然后,服务将花费其大部分时间不在受保护的onCreateonStartCommandonDestroy方法。

有两件事情需要考虑:

  1. Android可能决定在某个时候closures某个进程,当内存不足时,其他进程会立即为用户提供服务。 在被杀死的进程中运行的应用程序组件因此被销毁。 当这些组件再次为他们工作时,将再次启动一个进程。 在这种情况下, onDestroy()不被调用,因为Android操作系统将回收资源(这是一般的操作系统的基本任务 – 如果你不知道)。
  2. 服务既可以启动,也可以绑定连接。 在这种情况下,只要服务启动,或者与Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行。 一旦这两种情况都不存在,就会调用服务的onDestroy()方法,服务被有效终止。 所有清理(停止线程,注销接收者)应该从onDestroy()返回完成。 所以当Android操作系统看到服务已经完成了它的工作,而不再需要 – 它将被Android操作系统破坏。 Android操作系统为开发者提供了释放服务资源的机会,不会造成内存泄漏。 在这种情况下,调用onDestroy()因为这是开发人员可以释放资源的地方。 当然,在这种情况下,应用程序的进程保持不变(因为可能有其他服务/活动正在运行)。