在活动被杀之前,onDestroy()内部可以花多少时间?

时间:2010-10-21 11:19:58

标签: android android-activity destroy

我知道我的问题标题一定听起来很模糊。但是,让我在这里说清楚。

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

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

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

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

此致 基基

2 个答案:

答案 0 :(得分:4)

我相信你很难问这个问题。

为了更好地理解正在发生的事情,你应该看一下developer.android.com上的生命周期图:

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

您需要取消初始化的内容和原因是什么?

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

如果你真的想要回答你的问题,那么它就是:

  • 当它正在运行onRestoreInstanceState()时,您的应用程序(可能)有尽可能多的时间 - 它甚至正在运行onDestroy()这意味着操作系统没有选择它杀害。但这很可能并不重要:首先,onDestroy()将永远不会在大多数应用程序中运行,如果操作系统改变主意并决定您的应用程序必须死亡,即使它正在运行,它也会终止它{{ 1}}。

答案 1 :(得分:3)

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

  

在Android中,系统可以防范   应用程序不够充分   响应一段时间   向用户显示一个对话框,   称应用程序无响应   (ANR)对话框

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

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

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