- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个服务在与我的应用程序相同的进程中运行。
有时 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/
我试图理解什么是 -XX:OnOutOfMemoryError='kill %p' 下面的命令是什么意思? 我不确定 %p 是什么意思? exec /bin/bash -c "LD_LIBRARY_P
我试图理解什么是 -XX:OnOutOfMemoryError='kill %p' 下面的命令是什么意思? 我不确定 %p 是什么意思? exec /bin/bash -c "LD_LIBRARY_P
这个问题在这里已经有了答案: Solving "adb server version doesn't match this client" error [duplicate] (17 个答案) 关闭
我是一名优秀的程序员,十分优秀!