在哪种情况下应该覆盖onDestroy()?

时间:2014-06-09 10:44:16

标签: java android android-activity activity-lifecycle

我正在阅读活动生命周期,并阅读以下链接中有关启动和销毁活动的文档: http://developer.android.com/training/basics/activity-lifecycle/starting.html

以下文字来自链接:

  

销毁活动

     

虽然活动的第一个生命周期回调是onCreate(),但它非常   最后一个回调是onDestroy()。系统调用此方法   活动作为您的活动实例的最终信号   完全从系统内存中删除。

     

大多数应用程序不需要实现此方法,因为本地类   引用会随着活动而被破坏,您的活动应该被破坏   在onPause()和onStop()期间执行大多数清理。但是,如果你的   活动包括您在此期间创建的后台主题   onCreate()或其他可能潜在泄漏的长期运行资源   记忆如果没有正确关闭,你应该杀死他们   的onDestroy()。

有人可以提供后台线程或“其他长时间运行资源”的示例(或示例)来保证onDestroy()覆盖,并解释它们如何避免常规onDestroy()清理?

澄清:我理解onPause(),onStop()和onDestroy()是如何工作的,这不是我所要求的。我要求更深入地澄清什么会保证覆盖onDestroy()

2 个答案:

答案 0 :(得分:2)

嗯,onDestroy()是一个在你的活动关闭时由框架调用的方法。它被调用以允许您的活动执行它可能希望执行的任何关闭操作。该方法与垃圾收集实际上没有任何关系。特别是,它与C ++ destuctors无关(尽管它的名字)。

此方法使您的程序有机会执行清理资源等操作,以便它们不会污染关联的应用程序。如果您没有要执行的关闭操作,则无需覆盖它。基类基本上什么也没做。

答案 1 :(得分:0)

如果无法将cleanUp logic放入onDestroy()onPause(),则必须将onStop()放入onStop()

示例:您希望您的活动仅在完成时才执行某些操作,即只执行一次。您无法将该逻辑放在loses focus中,因为无论何时您的活动onPause()goes to background - 都会在您的活动{{1}}时调用。