2

我知道我的问题标题听起来很模糊。但是让我在这里澄清一下。

假设我在中间件堆栈上有一个 android 应用程序。在我的活动的 onCreate() 中,我初始化了我的中间件模块。

在其 onDestroy() 中,我必须取消初始化中间件。现在我的中间件调用可能需要相当长的时间来处理。所以我想知道 onDestroy() 函数有多少时间,看看我的去初始化是否可以在这段时间内发生。

将我的 de-init 保留在 onDestroy() 中是否合理?

另外,假设我在活动 A1 的 onCreate() 中初始化了中间件。单击按钮时,活动 A1 切换到活动 A2。在内存不足的情况下,LMK 会杀死一段时间未使用的活动。在这种情况下,活动A1不会被杀死吗?当活动 A1 被杀死时,我在 A1 中创建的所有实例也会被破坏吗?

问候,琪琪

4

2 回答 2

5

我相信你问这个问题很困惑。

为了更好地理解正在发生的事情,您应该查看可在 developer.android.com 上找到的生命周期图:

您将看到Activity.onDestroy()只有在受控关闭活动的情况下才会调用它——这种情况极少发生,因为 Android 操作系统可以在各种状态下终止您的进程,而无需调用您的onDestroy()方法。

什么以及为什么需要取消初始化?

  • 如果您担心释放资源,那么当/如果您的进程被终止时,它们中的大多数都会被释放。
  • 如果您担心保存用户的数据(您的应用程序的状态),那么您应该覆盖onSaveInstanceState()onRestoreInstanceState()

如果您真的想回答您的问题,那么这里是:

  • 当它正在运行onDestroy()时,您的应用程序(可能)有尽可能多的时间 - 它甚至正在运行的事实onDestroy()意味着操作系统没有选择它来杀死它。但这很可能无关紧要:一方面,onDestroy永远不会在大多数应用程序中运行,如果操作系统改变主意并决定你的应用程序必须死掉,即使它正在运行,它也会杀死它onDestroy
于 2010-10-21T11:33:24.263 回答
3

http://developer.android.com/guide/practices/design/responsiveness.html

在Android中,系统通过向用户显示一个对话框来防止应用程序在一段时间内响应不足,称为应用程序无响应(ANR)对话框

如果您的应用程序在 5 秒内没有响应,通常会弹出 ANR 对话框。正如 jhominal 所指出的,该onDestroy()方法可能不是您想要进行清理/保存首选项/等的地方。

无论您选择在哪里执行此操作,无论是在哪里onDestroy()onSaveInstanceState()onPause()相信一般的 5 秒规则都将适用。如果您正在执行的操作超过 5 秒,则会显示 ANR 对话框,并且用户可以选择强制关闭您的应用程序。

编辑: 如果您的应用程序在后台,如果您违反 5 秒规则,它可能会(可能?)直接被杀死而不会显示 ANR 对话框。但我不确定这一点,只是假设。

于 2010-10-21T13:04:41.950 回答