【问题标题】:What's the most "death-resistant" component on Android?Android 上最“抗死”的组件是什么?
【发布时间】:2025-12-13 00:45:01
【问题描述】:

我正在寻找最合适的类来作为从我的活动调用的 AsyncTasks 的调度程序。

我认为可能是以下之一:

  1. 应用程序的子类;
  2. 服务的子类;
  3. 我自己的静态东西。

至于我 - 实施第三个选择更简单。但问题是它会比服务或应用程序更“抗死”吗?此外,什么会活得更久也很有趣——应用程序还是服务?我的猜测是,只要应用程序(Android 中的任务)进程存在,应用程序就会存在。

所以基本上我需要根据它们的“抗死亡”质量来划分这些选项,因为我想依赖最“静态”的东西。

更新:

这个问题最初是在 2010 提出的,当时 (1) Android 是开发人员的新平台,(2) Google 文档对应用组件的生命周期过于含糊(在某些情况下甚至具有误导性) -cycles 和整个应用进程的生命周期。

【问题讨论】:

  • 我立即从手机中删除了坚持“死亡证明”的应用程序。
  • 您可能想更清楚地解释您想要实现的目标。现在听起来你正在试图让你的应用程序无法关闭,这是你将很难获得建议的事情。
  • 不推荐使用,会损害用户体验和电池寿命
  • 感谢你们的 cmets!我可能应该更清楚地解释我想要实现的目标。这样,Activity就可以启动AsyncTask了。例如,AsyncTask 发布 http 请求以注册新用户。由于 Activity 是一个可被操作系统杀死的组件(如果手机应用程序跳起来可能会被杀死),AsyncTask 可能无法将请求结果传递回 Activity。因此,在恢复时,Activity 将不得不重新运行 AsyncTask,但我不想再次重新发送相同的凭据并用“此类用户名已在使用”来提醒用户。
  • 这就是为什么我需要一种机制来存储 AsyncTask 结果,所以当 Activity 恢复自身时,它可能会要求等待结果。

标签: android android-asynctask android-service android-lifecycle


【解决方案1】:

您绝对应该使用Service

这背后的主要原因 - Service 有它自己记录的生命周期,而应用程序没有。 Application 实例,就像你的任何静态变量一样,几乎可以在任何时候被系统杀死,你不会收到任何回调,也不能停止这个过程。因此,任何未保存的数据(所有静态变量)都将丢失。

另一方面,Service 不能被系统静默杀死,至少应该先调用onDestroy() 方法。有了这样的回调,您可以将您的状态保存到一些持久性内存(如 SharedPreferences、文件、数据库等),并在您的应用程序或服务启动时恢复该状态。

【讨论】:

  • 感谢您的回复! ;) 好吧,我在 2 年前问过这个问题,现在我已经找到了使用 Service 的相同解决方案,以及最终以 Android 特定架构结束的其余 Android 特定内容(这不是当您刚刚从 BlackBerry 开发切换时,会立即浮现在脑海中的 smth :) )。不管怎样,谢谢。 +1