Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓服务被杀_Android_Service - Fatal编程技术网

Android 安卓服务被杀

Android 安卓服务被杀,android,service,Android,Service,我有一个与我的应用程序在同一进程中运行的服务 有时Android操作系统决定终止我的服务(可能是因为内存不足) 我的问题是:我的应用程序是否会随服务一起终止?或者它到底是如何工作的 谢谢 进程被低内存杀手杀死,而不是应用程序。因此,除非您做额外的工作以使您的服务在不同的进程中运行,否则您的活动将与您的服务一起终止 虽然activity manager可能会对不再需要的activity对象调用onDestroy,但低内存杀手不会尝试销毁流程中的任何对象。但这是常规活动生命周期的一部分,而不是因为内

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

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

我的问题是:我的应用程序是否会随服务一起终止?或者它到底是如何工作的


谢谢

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

虽然activity manager可能会对不再需要的activity对象调用onDestroy,但低内存杀手不会尝试销毁流程中的任何对象。但这是常规活动生命周期的一部分,而不是因为内存不足


(顺便说一句,我不清楚您是指一般意义上的“应用程序”,还是指扩展应用程序的对象,或者是指显示UI的活动。)

应用程序是指具有用户界面的东西,如果您在其中包含了服务,那么它肯定会被杀死,因为一旦缓存的应用程序队列变满,应用程序就会终止

所以,创建独立于应用程序的服务,或者换句话说,为其创建其他项目:)

顺便说一句,我不是一名经验丰富的安卓开发者,但我想这就是我通过谷歌观看安卓开发生命周期视频所学到的,首先请务必阅读:

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

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

当用户不再直接与流程进行交互时,它相对于参考文档中所述的其他流程成为可消耗的。也就是说,空进程(没有感兴趣的组件)将在包含用户一直在使用的活动的进程之前终止,这些活动将在运行服务的进程之前终止。因此,有一个运行中的服务将倾向于保留您的进程,而以牺牲其他进程为代价

同时,我们需要很好地处理越来越多的应用程序离开服务运行,通常是无限期的,并且经常是内存泄漏。因此,如果一项服务运行的时间越来越长,Android将越来越不努力地保持其进程。实际上,这意味着将其向下移动到后台存储桶,直到内存不足杀手将其取出。之后,如果服务仍要运行,则将创建一个新进程,以便在中重新启动该服务


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


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

绝对不要创建其他项目。也不要让服务在另一个进程中运行(通过android:process),除非是在非常特殊的情况下。是的,我正试图让我的服务在同一个进程中运行。对于我来说,仅仅调用静态方法可能比实现aidlthanks更快更容易,因为这是一个有用的答案!所以更具体一点:我从应用程序中创建子类,并在其中保存对我的服务对象的引用。当我的服务被终止时,我如何获得新服务的引用?还是我的应用程序对象也随之消亡,当它被重新实例化时,一切都和我第一次启动应用程序时一样?当为了内存而杀死某些东西时,整个过程(包括应用程序对象)都被杀死,此时没有在其中执行任何代码。如果服务只是因为不再需要运行而被销毁,那么将调用它的onDestroy(),当以后需要该服务时,将创建一个新实例并调用onCreate()。就我个人而言,我一般不建议使用该应用程序;仅仅使用静态单例类并不能给你带来任何好处,我认为它为人们设定了一些期望(w.r.t.有一个更传统的应用程序模型),但这些期望并没有真正起作用。我明白你的意思。我唯一的问题是,我不想从所有不同的活动绑定到服务,这迫使我使用应用程序类。我只在应用程序的onCreate方法期间调用bind,然后所有其他活动通过我的应用程序单例访问服务。你会提出更好的建议吗?让你的singleton接受一个它可以绑定的应用程序对象(或者只是应用程序的上下文)。“这不需要停止服务;一个想要继续运行的服务会这样做,它只需要在一个新流程中实例化。”两个问题,有没有一种方法可以判断一个进程可能很快就会终止,以及如何在一个新的进程中创建一个新的服务?所谓的应用程序,我指的是从应用程序扩展而来的对象