4

ZXing ライブラリを使用して Android アプリを作成しましたが、java.lang.OutOfMemoryError.

まず、エラーが自分の側にあると確信していたので、Patrick Dubroy Google I/O 2011: Memory management for Android Appsおよびメモリ リークを追跡する方法に関する他のいくつかのチュートリアルに従って、Eclipse メモリ アナライザー (MAT) を使用しました。 Android のメモリ リークまたはさまざまなリーク方法

MAT では、何百もの のインスタンスがcom.google.zxing.common.BitMatrixヒープ メモリの大部分を占めることがわかりました。

驚いたことに、元の ZXing テスト プログラム「CaptureActivity」でも同じ問題が発生しました。

いくつかの調査の後、DecodeHandlerクラス内のアクティビティ参照により、ガベージ コレクターがBitMatrix. しかし、私はこれを確認するには経験が少なすぎます。さらに、オリジナルの ZXing ライブラリ (バージョン 2.1) にこの問題があることに驚いています。

誰でもこの現象を再現できますか、または以前に経験したことがありますか?

4

2 に答える 2

0

あなたは正しい軌道に乗っていると思います。DecodeHandlerユーザー コードのどの部分が への参照を保持しているか、および への推移的な参照を保持しているかを判断するには、MAT ヒープ プロファイルを調べ続ける必要がありますBitMatrix。からの着信参照を追跡し、BitMatricドミネーター ツリーを計算し、リークの疑いをチェックしてください。

アプリケーションのプロファイリングを試みて、コードのどの部分がBitMatrix割り当てを担当しているかを確認し、それをアプリケーション コードに追跡してみます。

CaptureActivity の例で同じ問題が発生するという事実は、ライブラリの不適切な使用が原因である可能性があるため、ライブラリがメモリ リークを起こしていることを必ずしも証明するものではありません。たとえば、例が同じままでライブラリが更新された可能性があります。

于 2013-06-05T03:35:11.203 に答える