Android:在应用中重新打开活动的OutOfMemory异常

时间:2013-10-10 13:08:52

标签: java android memory-leaks android-activity

我正在编写一个Android应用程序,允许在对数据执行某些信号处理时播放录制的文件。

从列表视图中选择一个文件,这将启动一个新的活动,在该活动中进行回放和处理。在onBackPressed方法中,我调用finish来结束活动并返回列表视图,用户可以在其中选择另一个文件。

一次选择一个小文件或一次选择一个大文件时,一切正常,但是当再次选择一个大文件时,会抛出一个OutOfMemoryError异常。

我已经使用DDMS来查看我的内存堆,很明显,当返回列表视图时,活动的内存不会被释放。它根据正在加载的文件的大小累积。

尽管进行了大量研究,但我无法解决内存泄漏的来源。我已经研究过Bitmap和Context引用作为原因,但这些似乎不是问题。文件加载本身似乎也不是问题,因为我有另一个使用从麦克风获取的实时音频的类似活动。

1)可能是内存泄漏的原因是什么?

2)如何在调用finish / ondestroy时确保释放活动的内存。

1 个答案:

答案 0 :(得分:0)

您可以将'WeakReference'组件附加到大型数据块。这将释放您在需要时保留的旧关联内存块。所以在另一个文件获取/请求内存后,它会释放那些旧的'WeakReference'块,你的内存问题应该以这种方式解决。这应该可以工作,因为好像你只需要指定时间的文件,而这种方法你可以让系统担心何时释放它而不必担心。