我正在编写一个 Android 应用程序,它允许在对数据执行一些信号处理的同时播放录制的文件。
从列表视图中选择一个文件,这将启动一个新的活动,在该活动中进行播放和处理。在 onBackPressed 方法中,我调用完成来结束活动并返回到列表视图,用户可以在其中选择另一个文件。
多次选择小文件或一次选择大文件时一切正常,但是再次选择大文件时会引发 OutOfMemoryError 异常。
我使用 DDMS 查看了我的内存堆,很明显,当返回列表视图时,活动的内存没有释放。它根据正在加载的文件的大小进行累积。
尽管进行了广泛的研究,但我无法弄清楚内存泄漏的来源。我已经研究了位图和上下文引用作为原因,但是这些似乎不是问题。文件加载本身似乎也不是问题,因为我还有另一个类似的活动,它使用从麦克风获取的实时音频。
1)内存泄漏的原因可能是什么?
2) 如何确保在调用完成/ondestroy 时释放活动的内存。