是否确保在f​​inish()之后调用onDestroy()?

时间:2013-12-20 09:57:36

标签: android ondestroy activity-finish

我总是认为finish()会立即触发ofDestory()。但是在4.3中,这似乎不是事实。 我只想知道哪种情况它会发生什么? 对不起,我不能把我的所有代码放在这里。 它困扰了我几个小时,我找不到任何有用的信息。

4 个答案:

答案 0 :(得分:2)

From the docs:

  

onPause()是保证在进程被终止之前被调用的最后一个方法 - 如果系统必须在紧急情况下恢复内存,则可能不会调用onStop()onDestroy() 。因此,您应该使用onPause()将关键的持久性数据(例如用户编辑)写入存储。

如果您使用finish()或系统自行杀死了您的活动,则无关紧要。如果系统“想要”恢复内存,则无法保证将调用onDestroy()onStop()

答案 1 :(得分:1)

不,不会保证会调用onDestroy()

onStop()

也是如此

您想要的是onPause()

对于所有版本的Android都是如此,最新版本可以追溯到1.0。对于初学者来说,Activity lifecycle最初可能会让人感到困惑。但这不是初学者的错,而是框架设计师的错。

初学者犯的另一个错误是假设onResume()是关于恢复活动的,而实际上它是在活动中恢复的UI线程。这是文档一遍又一遍的另一点,但实际上,如果android团队调用该方法的东西不那么模糊,那将会更加简单。

答案 2 :(得分:1)

首先,这个答案假定您指的是Android的Activity类及其finish()方法和onDestroy()生命周期方法。

其次,这取决于你对“确定”的定义:

您的流程可能会在finish()onDestroy()之间终止,原因与触发finish()

的调用无关

设备制造商或ROM修改器可能会引入一些棘手的更改,会破坏finish()onDestroy()之间的联系

电池可能会在finish()onDestroy()

之间消失

答案 3 :(得分:-1)

根据:http://developer.android.com/reference/android/app/Activity.html 总是会被召唤,
的onDestroy():
在您的活动被销毁之前收到的最后一个电话。这可能是因为活动正在完成(有人在其上调用finish(),或者因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()方法区分这两种情况。