gpt4 book ai didi

android - 如果没有主应用程序,后台服务能否存在?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:38 25 4
gpt4 key购买 nike

让我们检查下一个场景:

  1. 我创建了一个新的 Android 应用程序,其中包含应用程序类、 Activity 和后台服务。
  2. 我在应用程序类中有一些 static 变量,假设它是一个 int i = 0;
  3. 我启动 Activity ,并从 Activity 的onCreate() 启动服务,服务获得START_STICKY 标志。
  4. 服务 所做的就是使用TimerTask 将当前秒数写入应用程序类中的变量。5.我退出 Activity
  5. 一段时间后,Android 将终止服务和应用程序(假设设备资源不足),并由于 START_STICKY 标志而重新启动服务。

现在我有问题了:

  1. 是操作系统杀死应用程序但不杀死服务的情况吗?
  2. 当系统重新启动服务时,应用程序是否也会重新启动?如果是 - 它将具有哪个上下文,如果没有,怎么可能在没有他的应用程序的情况下运行服务?

谢谢,对不起我糟糕的英语......

最佳答案

<强>1。是否存在操作系统杀死应用程序但不杀死服务的情况?

tl;dr: 是的,这是可能的。但是,Service 必须在它自己的进程中启动。

解释:

重要的是要认识到,Android 操作系统在内存不足时会终止进程,而不是个别组件,例如Activities服务(see this answer)。

鉴于上述陈述,很明显 Service 可以独立于 Application 存在,前提是它们包含在单独的进程中。否则,它们会在销毁进程时一起销毁。

现在考虑存在于不同进程中的 ServiceApplication 的情况。在 Android 中,进程在低内存情况下从低到高优先级被销毁。优先级顺序为:空 < 背景 < 服务 < 可见 < 前景 ( see here )。因此,您的 Application 可能会在您的 Service 保持 Activity 状态时被销毁(例如,如果您的 Application 在后台)并且您的 Service 将在您的应用程序保持 Activity 状态时被销毁(应用程序在前台)。

您可以通过定义 android:process 来声明应用程序的任何组件(Activity、Service、ContentProvider 等)在其自己的进程中运行。组件 list 标记中的属性。

来自Processes的官方文档:

By default, all components of the same application run in the same process and most applications should not change this. However, [...] the manifest entry for each type of component element — Activity, Service, Receiver, and Provider — supports an android:process attribute that can specify a process in which that component should run. You can set this attribute so that each component runs in its own process or so that some components share a process while others do not. [...] The Application element also supports an android:process attribute, to set a default value that applies to all components.


<强>2。当服务被系统重启时,应用程序是否也会重启?

这与问题1的答案有关。

如果 ServiceApplication 存在于同一进程中,那么它们将一起被销毁并重新启动。

如果 Service 作为 Application 存在于单独的进程中,那么它们是完全独立的进程,因此将像 Android 操作系统一样相互独立地被销毁和重新启动认为合适。

关于android - 如果没有主应用程序,后台服务能否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15267877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com