1

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

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

多次选择小文件或一次选择大文件时一切正常,但是再次选择大文件时会引发 OutOfMemoryError 异常。

我使用 DDMS 查看了我的内存堆,很明显,当返回列表视图时,活动的内存没有释放。它根据正在加载的文件的大小进行累积。

尽管进行了广泛的研究,但我无法弄清楚内存泄漏的来源。我已经研究了位图和上下文引用作为原因,但是这些似乎不是问题。文件加载本身似乎也不是问题,因为我还有另一个类似的活动,它使用从麦克风获取的实时音频。

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

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

4

1 回答 1

0

您可以将“WeakReference”组件附加到您的大数据块。这将释放您在需要时持有的旧关联内存块。因此,在另一个文件获取/请求内存后,它会释放那些旧的“弱引用”块,你的内存问题应该以这种方式解决。这应该可以工作,因为您似乎只需要指定时间的文件,并且使用这种方法,您可以让系统担心何时释放它而不必担心。

于 2013-10-10T13:20:58.287 回答