我正在编写一个Android应用程序,允许在对数据执行某些信号处理时播放录制的文件。
从列表视图中选择一个文件,这将启动一个新的活动,在该活动中进行回放和处理。在onBackPressed方法中,我调用finish来结束活动并返回列表视图,用户可以在其中选择另一个文件。
一次选择一个小文件或一次选择一个大文件时,一切正常,但是当再次选择一个大文件时,会抛出一个OutOfMemoryError异常。
我已经使用DDMS来查看我的内存堆,很明显,当返回列表视图时,活动的内存不会被释放。它根据正在加载的文件的大小累积。
尽管进行了大量研究,但我无法解决内存泄漏的来源。我已经研究过Bitmap和Context引用作为原因,但这些似乎不是问题。文件加载本身似乎也不是问题,因为我有另一个使用从麦克风获取的实时音频的类似活动。
1)可能是内存泄漏的原因是什么?
2)如何在调用finish / ondestroy时确保释放活动的内存。
答案 0 :(得分:0)
您可以将'WeakReference'组件附加到大型数据块。这将释放您在需要时保留的旧关联内存块。所以在另一个文件获取/请求内存后,它会释放那些旧的'WeakReference'块,你的内存问题应该以这种方式解决。这应该可以工作,因为好像你只需要指定时间的文件,而这种方法你可以让系统担心何时释放它而不必担心。