私はAndroidアプリケーションで潜在的なメモリリークを追跡していますが、私は何をすべきか分かりません。まず、私がしようとしていることを説明します。ギャラリー内のListViewを使用したAndroidのメモリリーク
私はEclair(APIレベル7)とHTC Incredible running Gingerbread(2.3.7、APIレベル10)でテストしています。 LogCatを観察すると、アプリケーションの最大ヒープサイズは約32MBであると仮定します。
私は連絡先のいくつかのページを持っているアドレス帳を構築しようとしています。左右にスクロールしてページ間を移動し、上下にスクロールして現在のページをナビゲートします。これを達成するために、私はGallery
を使用しています。そのアダプターは連絡先リストをListView
に適合させています。アダプターのアダプターは、1つの連絡先をRelativeLayout
に順応させます。
すべてが正常に動作しているようですが、ネイティブ(外部)メモリが不足していますギャラリーをスワイプするとすぐにがスワイプします。私はしばらくの間Gallery
の周りをスワイプした後にHPROFダンプを作り、それをMATに引っ張った。ヒストグラムでは、自分の連絡先RelativeLayout
が数百あって、私の連絡先ListView
でのみ保持されていました。ここで私はそのListView
の[切り捨て] MAT merge_shortest_paths出力を見たときに私が見つけたものです:
android.view.ViewRoot$1
+ this$0 android.view.ViewRoot
+ mAttachInfo android.view.View$AttachInfo
+ mScrollContainers java.util.ArrayList
+ array java.lang.Object[303]
+ [110], [112], [114], [116], [118], ... com.example.LeakyListView
+ ...and so forth.
これら漏れたListView
の上に保持する唯一のものは、このandroid.view.View$AttachInfo
年代mScrollContainers
フィールドでした。問題は、最初に私の意見がどのようにそこに入っているのかわからないので、私はこの漏れを塞ぐ方法を失いました。
どのようにこのメモリリークを解決できますか?少なくとも、このリファレンスチェーンはどのように構築され、ViewRoot
、AttachInfo
、およびmScrollContainers
は何ですか?
簡単なテストケースに分けてすぐにコードを投稿してみますが、これで会話を開始するには十分だと思っています。
uが私にあなたが使用している画像の最大サイズを伝えることができますか? –
各連絡先の画像は32x32です。私のサンプルデータでは、各 "ページ"には10の連絡先があり、7ページあります。私は[Fedorのlazylist](https://github.com/thest1/LazyList)に似たImageLoaderを使用しています。ソースイメージはそれぞれ約37x37です。 –
これとまったく同じ問題が発生しています。 –