首先一定要看:
http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
关键是在Android上,一个进程只是一个代码的容器,或者一个或多个组件(活动,服务,接收器,提供者).默认情况下,.apk中的所有组件都可以获得自己的专用进程,它们都在一起运行.这几乎总是你想要的.
当用户直接与该进程的组件进行交互(这是一个活动)时,Android会非常努力地保持该进程的运行,除非在非常情况下,否则不会看到它被杀死.
当用户不再直接与过程进行交互时,相对于参考文档中描述的其他过程,它变得消耗性.也就是说,在进程持有用户已经使用的活动的进程之前,空进程(没有有趣的组件)将被杀死,这将在具有正在运行的服务的进程之前被杀死.因此,运行服务将倾向于以其他流程为代价来维护您的流程.
同时,我们需要处理好越来越多的应用程序,这些应用程序通常无限期地运行,并且经常伴随着内存泄漏.因此,服务运行时间越来越长,Android将越来越难以保持其进程.有效地,这意味着将其移动到后台桶,直到内存不足者将其取出.之后,如果服务仍然要运行,那么将创建一个新进程,以便重新启动.
结果是,对于正在运行很长时间的正常服务,预期他们的过程会在一段时间后被杀死的行为.这不需要停止服务;一个想要继续运行的服务将会这样做,它只需要在一个新的过程中被实例化.
当然,只要用户正在与您的进程中的活动进行交互,该过程将不会被杀死,因为它将其拖到前台类别,无论其中的任何服务发生了什么.