Android Out of Memory Exceptions

时间:2011-05-06 17:11:50

标签: android exception memory

我正在编写一个带有位图的应用程序。如果您启动应用程序,退出应用程序并多次返回应用程序,最终因内存不足而被强制关闭。

我知道内存发生在哪里,可以尝试捕获。问题是如果我没有内存运行,我该怎么办?如果没有位图,我的应用程序就无法运行,所以我不能只显示它们。

当我得到onPause时,我尝试将事物设置为null。我试过在onPause完成。在撰写这封电子邮件之前,我做了很多研究,阅读了很多帖子,并尝试了很多建议。

底线是我使用的内存似乎没有被释放或其他东西正在进行。

我尝试在启动和停止之间使用adb shell cat / proc / meminfo命令,这是我发现的:

MemTotal:31348

启动应用,一切正常

MemTotal:18180

退出应用

MemTotal:20160

启动应用,一切正常

MemTotal:12480

退出应用

MemTotal:13740

启动应用,一切正常

MemTotal:9600

退出应用

MemTotal:10844

启动应用程序,第一个内存异常,5个位图中的一个只是没有显示,但没有崩溃

MemTotal:6224

退出应用

MemTotal:7244

启动应用程序,无法启动,内存不足导致我捕获的错误,因此退出

MemTotal:7836

启动应用程序,内存不足异常和强制关闭,按下强制关闭按钮

MemTotal:31648

正如你所看到的那样,记忆现在终于被释放了,但只有在力量结束后才会释放。

如果我快速启动和退出或者在每次启动之间等待并完成同样的事情并不重要,所以我不能只是引入延迟。

有没有办法“强制”强制关闭,除非没有真正显示消息而不是错误条件?我认为这应该是finish()应该做的,但事实并非如此。

感谢您提供的任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

我们的应用程序遇到了同样的问题。不幸的是,没有“银弹”可以解决所有内存问题。您可以尝试以下几种方法:

i)对您使用的位图使用软参考/弱参考 ii)在onPause中回收位图并在onResume中再次解码它们。软引用位图的缓存将有所帮助 iii)考虑使用RGB_565而不是ARGB_8888(现在是Gingerbread的默认设置) iv)确保您的活动/活动没有泄漏或多个实例。

希望这有帮助。