我有一个与我的应用程序运行在同一进程中的服务。
有时候,Android系统会决定杀掉我的服务(可能是由于内存不足)。
我的问题是:我的应用程序是否会随着服务被杀掉呢?还是它是如何工作的呢?
谢谢!
首先请确保阅读:http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
关键在于,在 Android 中,一个进程只是一个用来容纳代码的容器,或者具体来说,是一个或多个组件(活动、服务、接收器、提供者)。默认情况下,.apk 中的所有组件都会获得自己专用的进程,它们都运行在同一个进程中。这几乎总是您想要的。
当用户直接与该进程的组件(即活动)交互时,Android 会尽最大努力保持该进程运行,并且您不会看到它在非特殊情况下被终止。
当用户不再直接与进程交互时,相对于其他进程,该进程变得可以牺牲的,详见所引用文档。也就是说,空进程(没有有趣的组件)将被杀死,而包含用户正在使用的活动的进程将被杀死,而具有运行服务的进程将被杀死。因此,具有运行服务的进程将倾向于保留您的进程,而牺牲其他进程。
同时,我们需要很好地处理越来越多的应用程序留下运行的服务,通常是无限期地运行,并且通常存在内存泄漏问题。因此,当服务运行时间越来越长时,Android 将会越来越少地尝试保持其进程运行。实际上,这意味着将其移动到后台存储区,直到内存不足杀手将其消除。在那之后,如果服务仍然想要运行,则会为其创建一个新进程以重新启动。
总的来说,对于长时间运行的正常服务,预期行为是它们的进程在一段时间后将被终止。这不需要停止服务;想要继续运行的服务将会这样做,只需要在一个新进程中实例化即可。
当然,只要用户正在与进程中的活动交互,该进程就不会被终止,因为这将其拉到前台类别,而与其中任何服务发生的情况无关。