Android服务遇难

Erd*_*dal 14 service android

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

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

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

谢谢!

hac*_*bod 35

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

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

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

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

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

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

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

  • 当为内存杀死某些内容时,整个进程(包括应用程序对象)将被终止并且此时不会执行任何代码.如果服务因为不再需要运行而被销毁,则将调用其onDestroy(),并且稍后需要该服务时,将创建一个新实例并调用onCreate().我个人通常建议不要使用应用程序; 它并没有真正给你任何东西,只是使用静态单例类,我认为设置人们的期望(有一个更传统的应用程序模型),并没有真正成立. (2认同)