在OutOfMemoryError之前永远不会调用Activity onDestroy

时间:2014-11-15 02:32:39

标签: java android memory android-activity memory-management

在我的android应用程序中,在应用程序内存不足之前,永远不会调用Activity上的onDestroy方法。我可以在活动的onStop()方法上调用finish(),并且永远不会耗尽内存,但是我会丢失后退按钮功能。

对不起,我对这个问题不太具体。我读过的一切都是android应该在资源变低时调用onDestroy()和finish()但是从不调用它。

我希望堆栈底部的活动能够调用finish()。它们不是,我最终耗尽了记忆。

我打电话给: adb shell dumpsys meminfo com.mypackage

我看到活动计数总是递增,直到OutOfMemoryError。如果我在onStop()上的活动上调用finish(),那么活动数将保持在30左右而且没有OOME。

感谢您的任何建议。 Android上的内存管理是一场灾难,感谢你提供的技巧。

1 个答案:

答案 0 :(得分:1)

  

我读到的一切都是当资源变低时,android应该调用onDestroy()finish(),但是永远不会调用它。

无法保证onDestroy()将被系统调用...操作系统能够在任何时候在没有任何警告的情况下终止它所喜欢的任何进程。这是一个有意的设计决策,因为它确保即使存在恶意应用程序,系统仍然可以完全控制设备。

  

Android上的内存管理是一场灾难。

系统非常善于破坏后台活动,以便在内存不足时为其他人腾出空间。你不应该担心后面堆栈中当前有多少活动,你当然不应该对这些活动持有弱引用,这样你就可以在以后手动调用它们finish()时间。系统将为您完成所有这些工作。

如果你得到一个OutOfMemoryError那么这意味着你的应用程序有一个你需要修复的严重内存泄漏,或者你的应用程序一次分配大量内存,直到运行时不能再使用它

相关问题