有时服务非常复杂。

当您从活动(或您的流程)启动服务时,该服务本质上是在同一流程上。

引用开发者注释

关于Service类的最困惑实际上是围绕它不是什么:

服务不是独立的过程。Service对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它将与它所属的应用程序在同一进程中运行。

服务不是线程。它本身并不是在主线程之外工作的一种方式(以避免Application Not Responding错误)。

因此,这意味着,如果用户将应用程序从最近的任务中滑出,它将删除您的进程(包括您的所有活动等)。现在,让我们来看三种情况。

首先,该服务没有前台通知。

在这种情况下,您的过程将与服务一起被杀死。

其次,服务具有前台通知

在这种情况下,服务不会被终止,进程也不会被终止

第三种情况如果该服务没有前台通知,则在应用程序关闭时仍可以继续运行。我们可以通过使服务在不同的流程中运行来做到这一点。(但是,我听说有人说它可能不起作用。请您自己尝试一下)

您可以通过在清单中包含以下属性来在单独的过程中创建服务。

android:process =“:yourService”

要么

android:process =“ yourService”流程名称必须以小写字母开头。

引用开发者注释

如果分配给该属性的名称以冒号(':')开头,则在需要时会创建一个对应用程序专用的新进程,并且该服务将在该进程中运行。如果进程名称以小写字母开头,则该服务将在具有该名称的全局进程中运行,前提是它具有这样做的权限。这允许不同应用程序中的组件共享进程,从而减少资源使用。

这是我收集的信息,如果有人是专家,如果我错了,请纠正我:)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐