gpt4 book ai didi

安卓服务被杀

转载 作者:可可西里 更新时间:2023-11-01 18:50:03 24 4
gpt4 key购买 nike

我有一个服务在与我的应用程序相同的进程中运行。

有时 Android 操作系统决定终止我的服务(可能是由于内存不足)。

我的问题是:我的应用程序会随着服务一起被终止吗?或者它究竟是如何工作的?

谢谢!

最佳答案

首先一定要阅读:http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

关键在于,在 Android 上,进程只是代码的容器——或者具体来说是一个或多个组件( Activity 、服务、接收者、提供者)。默认情况下,.apk 中的所有组件都有自己的专用进程,它们一起运行。这几乎总是您想要的。

当用户直接与该进程的组件(即 Activity )交互时,Android 会非常努力地保持该进程运行,除非在特殊情况下,否则您不会看到它被杀死。

当用户不再直接与流程交互时,相对于引用文档中描述的其他流程,它就变得可有可无。也就是说,空进程(没有有趣的组件)将在持有用户一直在使用的 Activity 的进程之前被杀死,这些 Activity 将在运行服务的进程之前被杀死。因此,拥有一个正在运行的服务往往会以牺牲其他进程为代价来维持您的进程。

与此同时,我们需要很好地处理越来越多的应用程序让服务继续运行,通常是无限期运行,并且经常会出现内存泄漏。因此,如果一项服务运行的时间越来越长,Android 将越来越不努力地保持其进程的运行。实际上,这意味着将它向下移动到后台桶,直到内存不足 killer 将其取出。之后,如果该服务还想运行,那么将创建一个新进程以供其重新启动。

结果是,对于长时间运行的正常服务,其进程会在一段时间后被杀死是意料之中的行为。这不需要停止服务;一个想要继续运行的服务会这样做,它只需要在一个新进程中实例化。

当然,只要用户正在与进程中的 Activity 进行交互,进程就不会被终止,因为这会将其拉到前台类别,而不管其中的任何服务正在发生什么。

关于安卓服务被杀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com