【问题标题】:Can a Service be killed but the Process kept alive可以杀死服务但进程保持活动状态
【发布时间】:2015-02-07 17:47:04
【问题描述】:

假设我的应用有一个用户正在与之交互的 Activity。 我的申请流程优先级现在是 1 - 最高。

假设我的应用程序中还有一个后台启动服务。 (即不绑定)

在极端的内存压力下,(假设所有较低优先级的进程都已被杀死)操作系统可以杀死我的服务(意味着删除它对服务的引用并调用它的 onDestroy 方法)但仍然保持我的应用程序进程处于活动状态?

我已经阅读了官方文档, 另外,Dianne 对这个帖子的回应: Android service killed 还有这个线程: When Service is killed, can the process be still alive?

但是,我想 100% 确定这不是一个选项,而不是 99%。

是否有官方文档表明这种情况下的操作系统会杀死整个进程?

谢谢

【问题讨论】:

  • 100% 确定您可以获取 AOSP 源代码并找到答案。
  • 你所说的可能是每个问题的答案。如果他们可以简单地阅读整个 android 操作系统并找到它,为什么还要问一个问题?
  • 那为什么不先问呢?我可以确保你这样做是可行的,你可以发布自己的问题答案,甚至接受它,从而为 SO 社区带来好处。
  • 因为在询问其知识是否不常见但其他人已经调查过之前无需这样做,请阅读 CommonsWare。反正不再相关了

标签: android service process


【解决方案1】:

在极端的内存压力下,(假设所有较低优先级的进程都已被杀死)操作系统能否杀死我的服务(意味着删除它对服务的引用并调用它的 onDestroy 方法)但仍然让我的应用程序进程保持活动状态?

首先,你默认只有一个进程。

其次,如果该进程是前台 UI(“我的应用程序有一个用户正在与之交互的 Activity”),它不会因内存不足而终止。只有后台进程会被终止。

【讨论】:

  • 您好 CommonsWare,感谢您花时间回复,我阅读了您的许多帖子。关于:“首先,默认情况下您只有一个进程。”是的,我知道,当我写“假设所有低优先级进程已被杀死”时 - 意味着其他低优先级应用程序进程(不是我的应用程序进程),所以现在应用程序将不得不销毁前台进程。关于您的第二条评论,“只有后台进程才会终止”这是不正确的。在极端情况下,他们可以: 创建两个使用 JNI 来消耗更多 RAM 内存的应用程序。最终其中一个将终止。
  • @ZiviMagic:“创建两个使用 JNI 来消耗不断增加的 RAM 内存的应用程序。最终其中一个将终止”——只有一个在前台。 “操作系统可以杀死我的服务(意味着删除它对服务的引用并调用它的 onDestroy 方法)但仍然让我的应用程序进程保持活动状态吗?” -- 由于内存不足,操作系统不会“杀死”服务或任何其他组件。由于内存不足,Android 会终止后台进程。
  • 您可以在它们两个中启动一个前台服务,这样它们的两个进程都将具有前台优先级。我试过了,你可以看到其中一个最终会被杀死,即使它具有前台优先级。但无论如何,从你的回答来看,我认为由于内存不足,android 会终止进程而不是进程中的特定服务。谢谢
  • @androiddeveloper:“或者进程会像那样被杀死?” - 那要看。在内存不足的情况下,不仅对正在运行的进程很重要,而且对需要运行的进程也很重要。例如,来电不能等待一堆onDestroy() 调用。在这种情况下,操作系统保留立即终止进程的权利。还要记住,如果用户强制停止您的应用程序,onDestroy() 也不会被调用。关于重启,除了强制停止之外的任何事情都应该触发重启。
  • @androiddeveloper:正确。几率相当低,但不是零。
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2018-12-26
  • 2021-09-16
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多