Я написал приложение для Android, используя библиотеку ZXing, и получаю ошибку java.lang.OutOfMemoryError
.
Во-первых, я был уверен, что ошибка на моей стороне, поэтому я использовал Eclipse Memory Analyzer (MAT) в соответствии с Патриком Дюброем Google I/O 2011: управление памятью для приложений Android и несколько других руководств по отслеживанию утечек памяти, например Утечки памяти Android ИЛИ различные способы утечки.
В MAT я обнаружил, что со временем сотни экземпляров com.google.zxing.common.BitMatrix
заняли большую часть моей динамической памяти.
Удивительно, но я столкнулся с той же проблемой в оригинальной тестовой программе ZXing "CaptureActivity"!
После некоторого расследования я понял, что ссылка на активность в классе DecodeHandler
может помешать сборщику мусора освободить класс BitMatrix
. Но у меня слишком мало опыта, чтобы это проверить. Более того, я удивлен, обнаружив эту проблему в оригинальной библиотеке ZXing (версия 2.1).
Может ли кто-нибудь воспроизвести это явление или сталкивался с ним раньше?