我理解活动关闭时,会调用onDestroy()。但这不是永远做对的吗?有时,会调用onPause()。
所以假设我想在活动结束时清除一些内存,我到底在哪里做?由于onDestory可能没有被调用,我不能把它保留在那里吗?
诠: 我有2个活动A1和A2。 A1在app的启动时出现。 A1稍后调用A2。假设我在Activity A1的onCreate()中创建了一个类对象。当我退出应用程序时,即当应用程序不再可见时,必须删除此对象。 A1的onDestroy()或onStop()是最好的地方吗? 我猜onPause()可能不是正确的地方,因为当A1调用A2时我将调用onPause(),然后我不想删除该对象。
-Kiki
答案 0 :(得分:3)
我认为你的意思是onPause(),没有onSuspend()方法。如果您的活动干净地关闭,它将调用onStop()和onDestroy()。
如果系统内存不足并想要杀死你的活动,那么保证在你的进程被杀之前调用onPause(),但这是唯一的保证。可能不会调用onStop()和onDestroy()方法。所以你应该在onPause()中进行清理。
但是......不要忘记你的活动可以在onResume()和onPause()之间多次转换,所以你不想在这两种方法中做太多的分配和清理,它们应该很快。
你必须决定如何在onPause()中做最好的清理工作,以及你实际需要做什么,如果你的活动需要在低内存情况下被杀掉之前做一些事情。
答案 1 :(得分:1)
Google的文档说要在退出onPause()之前做一些需要做的事情,因为是的,在内存不足的情况下,onDestroy()可能不会被调用。
答案 2 :(得分:1)
我不认为onSuspend()存在。文档中没有提到它。也许你指的是onStop()。
当调用onStop()时,活动不再可见但尚未销毁。终止确实发生在onDestroy()调用之后,无论是通过调用finish()还是来自Android的内存需求来终止,如文档所述。然后,在我看来,释放内存的正确位置是onDestroy()。
如果必须停止与用户交互相关的CPU密集型操作,请在onPause()中执行此操作。