【问题标题】:Android: Activity.onDestroy() is not called when Dalvik kills this ActivityAndroid:当 Dalvik 杀死这个 Activity 时,不会调用 Activity.onDestroy()
【发布时间】:2011-12-29 19:02:17
【问题描述】:

我对@9​​87654321@ 感到困惑。当我的 Activity 被销毁时,我需要释放一些资源,但似乎 onDestroy() 只是在我按下“返回”键时被调用,而不是在我的 Activity 被 Dalvik 杀死时调用。我只是通过添加日志来测试它:

Log.v("my_tag", "onDestroy() called");

在 onCreate() 方法中也是如此:

Log.v("my_tag", "onCreate() called");

然后我开始我的活动,我在日志中看到:onCreate() called。我按“返回”键,然后再次启动 Activity,然后我看到:

onDestroy() called
onCreate() called 

然后我按“主页”键并再次转到我的活动,日志不会改变。好的。

然后我再次按“Home”键并启动一些真正“繁重”的应用程序。在日志中与 onDestroy() 无关,但是当我再次启动我的活动时,我在日志中看到:onCreate() called!所以, onDestroy() 没有被调用,但是我的 Activity 被杀死了。怎么了?

【问题讨论】:

  • +1 - 供您研究..

标签: android android-activity ondestroy


【解决方案1】:

来自onDestroy() 文档:

[..] 在某些情况下系统会简单地杀死活动的 托管进程而不在其中调用此方法(或任何其他方法),因此 它不应该被用来做打算留在身边的事情 进程结束后。

在 Android 中,您不会得到保证的 onDestroy() 呼叫。
如果你想释放一些资源,你应该改为onPause()

【讨论】:

  • 嗯,谢谢。在文档中还指出:“活动的整个生命周期发生在第一次调用 onCreate(Bundle) 到最后一次调用 onDestroy() 之间”,所以,我认为无论如何都应该调用它。那么,我应该在哪里释放资源以确保它会被调用?实际上这个Activity绑定了Service,我想在Activity被销毁之前解除绑定。
  • 哦,对不起,我看到你已经说过:我应该在onPause() 做。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 2019-11-17
  • 2017-01-23
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2011-07-27
相关资源
最近更新 更多