我使用 ZXing 库编写了一个 Android 应用程序,但出现了 java.lang.OutOfMemoryError
。
首先,我确定错误出在我这边,所以我根据 Patrick Dubroy Google I/O 2011: Memory management for Android Apps 使用了 Eclipse 内存分析器 (MAT)以及其他几个关于如何追踪内存泄漏的教程,例如 Android Memory Leaks OR Different Ways to Leak .
在 MAT 中,我发现随着时间的推移,数百个 com.google.zxing.common.BitMatrix
实例占用了我的大部分堆内存。
令人惊讶的是,我在原来的ZXing测试程序“CaptureActivity”中遇到了同样的问题!
经过一番调查后,我发现 DecodeHandler
类中的 Activity 引用可能会阻止垃圾收集器释放 BitMatrix
。但我经验太少,无法验证这一点。此外,令我惊讶的是,我在原始 ZXing 库(2.1 版)中发现了这个问题。
任何人都可以重现这种现象或以前经历过这种现象吗?
最佳答案
我认为您走在正确的轨道上。您需要继续查看 MAT 堆配置文件以确定用户代码的哪一部分持有对 DecodeHandler
的引用并传递到 BitMatrix
。尝试跟踪来自 BitMatric
的传入引用,计算支配树并检查泄漏嫌疑人。
尝试分析应用程序以查看代码的哪一部分负责 BitMatrix
分配,并尝试将其追溯到应用程序代码。
CaptureActivity的例子出现同样的问题,可能是库使用错误导致的,并不一定证明库有内存泄漏。例如,可以在示例保持不变的情况下更新库。
关于android - Android ZXing 库是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930032/