在活动被终止之前,onDestroy() 可以花费多少时间?

kik*_*iki 2 android destroy android-activity

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

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

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

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

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

问候,琪琪

Jea*_*nal 5

我相信你问这个问题是相当困惑的。

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

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

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

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

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

  • 当它正在运行时onDestroy(),您的应用程序(可能)有它想要的时间 - 它甚至正在运行的事实onDestroy()意味着操作系统没有选择将其杀死。但这很可能无关紧要:首先,onDestroy绝不会在大多数应用程序中运行,并且如果操作系统改变主意并决定您的应用程序必须死掉,即使它正在运行,它也会杀死它onDestroy

  • @jhominal:关于何时保存用户数据的小说明。应该知道只有当应用程序被系统杀死时才会调用 onSaveInstanceState() 。如果应用程序由于用户按下后退按钮或在您的代码中调用“finish()”而退出,它将_不_被触发。所以如果你想 100% 确定你保存了当前的应用程序状态,这应该在 `onPause()` 中完成。 (2认同)