是一个android服务保证调用onDestroy()?
android上一个Activity的生命周期图并不能保证会调用onDestroy(),但是这个过程可能会被终止并且Activity会被突然删除。 android上的Service的生命周期图确实保证了onDestroy()被调用。 所以我有两个关于这个区别的问题。
首先,如果服务是与Activity相同的进程的一部分,那么是调用Service onDestroy(),尽pipeActivity onDestroy()不被调用? 我不认为,“杀死一个进程”表明操作系统正在停止线程并释放资源。
如果是这样的话,操作系统会突然杀死一个仅服务进程吗?
我不知道你在哪里看到一个服务保证有onDestroy()
调用。 据我所知,情况并非如此。 如果你阅读这个文档的页面,它描述了一个服务可能被杀死的条件。 所以,如果你问是否有一个进程同时承载一个活动和服务被杀死,将onDestroy()
调用服务(但不是在活动),那么答案是否定的; 一个服务的onDestroy()
不一定会被调用。 至于是否可以通过操作系统突然杀死一个仅服务进程:是的,可以。 当你有很多工作要做时,尤其如此,你的onStartCommand
调用只会使工作asynchronous排队。 然后,服务将花费其大部分时间不在受保护的onCreate
, onStartCommand
或onDestroy
方法。
有两件事情需要考虑:
- Android可能决定在某个时候closures某个进程,当内存不足时,其他进程会立即为用户提供服务。 在被杀死的进程中运行的应用程序组件因此被销毁。 当这些组件再次为他们工作时,将再次启动一个进程。 在这种情况下,
onDestroy()
不被调用,因为Android操作系统将回收资源(这是一般的操作系统的基本任务 – 如果你不知道)。 - 服务既可以启动,也可以绑定连接。 在这种情况下,只要服务启动,或者与Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行。 一旦这两种情况都不存在,就会调用服务的onDestroy()方法,服务被有效终止。 所有清理(停止线程,注销接收者)应该从onDestroy()返回完成。 所以当Android操作系统看到服务已经完成了它的工作,而不再需要 – 它将被Android操作系统破坏。 Android操作系统为开发者提供了释放服务资源的机会,不会造成内存泄漏。 在这种情况下,调用
onDestroy()
,因为这是开发人员可以释放资源的地方。 当然,在这种情况下,应用程序的进程保持不变(因为可能有其他服务/活动正在运行)。