Android服务遇难

时间:2010-06-15 01:09:16

标签: android service

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

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

我的问题是:我的应用程序是否与服务一起被杀?或者它是如何运作的?

谢谢!

3 个答案:

答案 0 :(得分:35)

首先请务必阅读:http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

关键是在Android上,进程只是代码的容器 - 或者特别是一个或多个组件(活动,服务,接收器,提供者)。默认情况下,.apk中的所有组件都有自己的专用进程,它们都在一起运行。这几乎总是你想要的。

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

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

与此同时,我们需要妥善处理越来越多的应用程序,这些应用程序通常会无限期地运行服务,并且通常会出现内存泄漏。因此,服务运行的时间越来越长,Android将越来越难以保持其流程。实际上,这意味着将其向下移动到后台存储桶,直到内存消除器将其取出。之后,如果服务仍然想要运行,那么将创建一个新进程以便重新启动它。

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

当然,只要用户与您的流程中的某个活动进行交互,该流程就不会被终止,因为无论其中的任何服务是什么,都会将其拉到前台类别。

答案 1 :(得分:4)

进程被低内存杀手杀死,而不是应用程序。因此,除非您做额外的工作以使您的服务在不同的流程中运行,否则您的活动将与您的服务一起被杀死。

低内存杀手不会尝试销毁进程中的任何对象,尽管活动管理器可能会在不再需要的Activity对象上调用onDestroy。但这是常规活动生命周期的一部分,而不是由于内存条件不足。

(顺便说一句,我不清楚你是指一般的“应用程序”,还是扩展应用程序的对象,或者你的意思是你的活动是否显示用户界面。)

答案 2 :(得分:1)

应用程序是具有用户界面的东西,如果你已经包含了一个服务,那么一旦缓存的应用程序队列变满,应用程序就会终止,它肯定会被终止

所以创建服务与应用程序分开,或者换句话说为它创建一个其他项目:)

不过,我不是一位经验丰富的Android开发者,但我想我通过Google观看Android开发生命周期视频所学到的知识