我有一个服务与我的应用程序在同一进程中运行。
有时,Android 操作系统决定终止我的服务(可能是由于内存不足)。
我的问题是:我的应用程序是否会与服务一起被杀死?或者它到底是如何工作的?
Thanks!
首先请务必阅读:http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
关键在于,在 Android 上,进程只是代码的容器——或者具体来说是一个或多个组件(活动、服务、接收者、提供者)。默认情况下,.apk 中的所有组件都有自己的专用进程,它们都一起运行。这几乎总是您想要的。
当用户直接与该进程的某个组件(即活动)交互时,Android 会尽力保持该进程运行,除非在特殊情况下,否则您不会看到它被杀死。
当用户不再直接与流程交互时,相对于参考文档中所述的其他流程,它就变得可消耗。也就是说,空进程(没有有趣的组件)将在持有用户一直在使用的活动的进程之前被杀死,而空进程将在正在运行的服务的进程之前被杀死。因此,拥有一个正在运行的服务往往会以牺牲其他进程为代价来保留您的进程。
与此同时,我们需要妥善处理越来越多的应用程序让服务无限期地运行,并且经常出现内存泄漏。因此,如果服务运行的时间越来越长,Android 将越来越不努力地保持其进程的运行。实际上,这意味着将其移至后台存储桶,直到内存不足杀手将其取出。之后,如果服务仍想运行,则会创建一个新进程供其重新启动。
结果是,对于长时间运行的正常服务,其进程在一段时间后被终止是预期的行为。这不需要停止服务;想要继续运行的服务会这样做,它只需要在新进程中实例化即可。
当然,只要用户与进程中的活动进行交互,该进程就不会被终止,因为这会将其拉到前台类别,无论其中的任何服务发生什么情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)