2011-05-06 41 views
0

我有一个应用程序,我写的是位图很重。如果您启动该应用程序,请退出该应用程序并多次回到该应用程序,最终由于内存不足而最终得到强制关闭。Android内存异常

我知道哪里出了内存不足,可以试试看。问题是,如果我没有运行记忆,我该怎么办?没有位图,我的应用程序无法正常工作,所以我不能不显示它们。

我试过把onPause设置为null。我曾尝试在onPause完成。在写这封电子邮件之前,我做了大量研究并阅读了许多帖子,并尝试了很多建议。

底线是我使用的内存似乎没有被释放或其他事情正在发生。

我使用ADB介面执行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

正如你可以看到内存现在终于发布了,但只有强制关闭后。

如果我开始和退出真的很快,或者在每次开始和结束之间等待发生同样的事情并不重要,所以我不能只引入延迟。

有没有办法“强制”强制关闭,除非没有真正显示消息并且不是错误状态?我认为这就是完成()应该做的事情,但事实并非如此。

感谢您的任何帮助或想法,我可以尝试。

+0

这听起来像你并没有真正把所有东西都设置为null,你需要。如果您发布了一些代码,显示所有保持对您的位图的引用的数据结构,或许我们可以提供帮助。另外,请查看使用分配跟踪器(描述[这里](http://android-developers.blogspot.com/2009/02/track-memory-allocations.html))。 – 2011-05-06 17:19:12

回答

0

我们的应用程序出现同样的问题。不幸的是,没有解决所有内存问题的“银弹”。这里有几件事你可以尝试:

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

希望这会有所帮助。