我知道我的问题标题一定听起来很模糊。但是,让我在这里说清楚。
说我在中间件堆栈上有一个android应用程序。在我的活动的onCreate()中,我初始化了我的中间件模块。
在onDestroy()中,我必须取消初始化中间件。现在我的中间件调用可能需要相当长的时间来处理。所以我想知道onDestroy()函数有多少时间,看看我的deinitialisation是否可以在那段时间内发生。
将我的de-init保留在onDestroy()中是否合理?
另外,假设我在活动A1的onCreate()中初始化中间件。在按钮单击时,活动A1切换到活动A2。在内存不足的情况下,LMK将终止一段时间未使用的活动。在这种情况下,活动A1不会被杀死吗?当活动A1被杀死时,我在A1中创建的所有实例是否也会被破坏?
此致 基基
答案 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对话框。但我肯定不知道这一点,只是假设。