imageloader - android 大量图片加载导致的内存问题
迷茫
迷茫 2017-04-17 15:48:42
0
8
769
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(8)
左手右手慢动作

android:largeHeap="true"

ピクチャー ウォールが読み込まれた後、90% 以上のメモリが必要になります。developer.android.com/training/displaying-bitmaps/process-bitmap.html で使用される公式チュートリアルにもビットマップ メモリ リークの問題があります。アクティビティに入るときと出るときのメモリ量は約 1% 増加しますが、ロードされる画像の最大数はほぼ同じです。 !

Android 自体がビットマップの問題を処理する準備ができていないのではないかと思います

いいねを押す +0
左手右手慢动作

ツールが理想的かどうかについては話さず、メモリ使用量を削減する方法について説明しましょう。
通常の方法は、Options.inSampleSize を使用してサンプリングすることですが、これにより画質が低下しますが、効果的です。
universal-imageloader によって提供されています。 config に関連する設定がありますが、ソース コードを見ると、デフォルトの設定では画像が画面解像度より小さい場合に縮小されないことがわかります。この場合、universal-imageloader は inSampleSize=1、つまりサンプリングなしで処理します。
したがって、私の処理方法は、ソース コードに基づいて変更し、いくつかのサンプリングを追加することです。画像が現在のものより小さい場合でも、画面の解像度はサンプリングのために制御できます。元の構成と比較して、このメモリ使用量は削減されます (サンプリング サイズ + 1 メモリ使用量が 75% 削減されるはずです)。理論的には画像の効果は悪くなりますが、実際には携帯電話の解像度は向上していますが、サムネイルの場合、この損失は肉眼では判断できません。
さらに、imageloader については、.bitmapConfig (Bitmap.Config.RGB_565) を使用することでメモリ使用量を削減することもできます。これについては、公式ドキュメントで説明されています。
さらに、繰り返しました。アクティビティに参加したり終了したりすると、この問題が発生します。これらのフレームワークを組み合わせることは考えていません。

いいねを押す +0
大家讲道理

「繰り返し入力」するとオーバーフローするため、メモリ リークが発生する可能性があります。
ヒープをダンプして、誰がビットマップ参照を保持しているかを確認できます

いいねを押す +0
阿神

「アクティビティには 100 枚以上の写真があります。」
すべてを表示しますか? 一部のみを表示する必要があります。
その他の場合は、対応する位置までスライドしてから表示してください

いいねを押す +0
黄舟

Baidu: image-loader、xutils など、非常に使いやすい Android 用のサードパーティの jar パッケージが多数あります。

いいねを押す +0
大家讲道理

動的読み込み。現在表示しているもののみを表示し、必要がない場合は対応するビットマップを解放します

いいねを押す +0
Peter_Zhu

ページネーション読み込みが使用可能

いいねを押す +0
大家讲道理

OOM がオーバーフローした場合は、Java 層でのリークに違いありません。MAT を使用して参照状況を分析します。
android:largeHeap="true" のメソッドは、OOM の出現を遅らせるだけです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート