android上的Activity的生命周期图并不保证会调用onDestroy(),但是可能会终止该进程并突然删除Activity。 android上的服务的生命周期图确保了将调用onDestroy()。所以我有两个与这种差异有关的问题。
首先,如果Service是与Activity相同的进程的一部分,那么是否调用了Service onDestroy(),虽然没有调用Activity onDestroy()?我不这么认为,因为“杀死进程”表明操作系统正在停止其线程并释放其资源。
如果是这样的话,操作系统是否会突然杀死仅服务进程?
答案 0 :(得分:31)
我不确定您在哪里看到服务可以保证onDestroy()
被调用。据我所知,情况并非如此。如果您阅读了文档的this页面,它会描述可以杀死服务的条件。因此,如果您询问是否有一个同时托管活动和服务的进程被杀死,那么将在服务上调用onDestroy()
(但不会在活动上调用),那么答案是否定的;服务的onDestroy()
不一定会被调用。至于服务操作系统是否可以突然杀死仅服务进程:是的,它可以。当你有很多工作要做时,尤其如此,你的onStartCommand
调用只会将工作排队异步进行。然后,该服务将花费大部分时间不在受保护的onCreate
,onStartCommand
或onDestroy
方法中。
答案 1 :(得分:11)
有两件事需要考虑:
onDestroy()
不会被称为,因为Android操作系统无论如何都会回收资源(这是操作系统的基本任务 - 如果你没有'我知道)。onDestroy()
被称为,因为这是开发人员可以释放资源的地方。当然,在这种情况下,应用程序的流程保持不变(因为其中可能还有其他服务/活动)。