Universal Image LoaderからGlideへの移行を開始しました。ただし、recyclerviewで上下にスクロールすると、大量の警告メッセージが表示されます。
W/Bitmap: Called reconfigure on a bitmap that is in use! This may cause graphical corruption!
Glideを別の画像読み込みライブラリに交換すると、警告が消えます。画像に関連するbindViewHolderのコード:
Glide.with(viewHolder.imageView.getContext())
.load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(viewHolder.imageView);
Nexus 5でテスト済み。
Android M(Nexus 5x)でアプリを初めて実行した後、同じ問題が発生します。
EDIT:Glide Githubで問題を開いた後 https://github.com/bumptech/glide/issues/74 、元の「解決策」では問題が解決せず、メッセージを非表示にするだけであることがわかりました。警告はAndroidビットマップからのものです。これは、Glideがビットマップを再利用してパフォーマンスを向上させるためです。
これは議論される ここ 、
通常、これはビットマップを誤って使用した結果です。中間のgetなしでビットマップをプールに複数回返すか、対応するターゲットでclear()を呼び出した後にビットマップを参照します。カスタム変換がある場合は、ビットマップをプールに2回返さないように注意深く調べるのに適した場所です。この問題の詳細については、wikiで確認できます: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide 。
表示されるログは、catchブロックからのものです(caught例外)。あなたがいることを確認してください:
recyclerViewを使用しているので、おそらく2番目のポイントは当てはまります。つまり、すべてのビットマップ参照を保持しながらビューをリサイクルします。
警告とグラフィックの破損が発生していました。これは、リサイクラービューの上部と下部に表示されるクリップされたビットマップの形式であり、スクロールが速すぎるとそのままになります。
フレームレイアウト内にイメージビューを配置することで、グラフィックの破損が解消されました。
Android StudioのLogcat Filtersでログをクリーンアップできます。
Android Logcatフィルターの正規表現に^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)
を追加します。
画像を読み込む前にGlide.clear()を呼び出してみてください。
Glide.clear(viewHolder.imageView);
Glide.with(viewHolder.imageView.getContext())
.load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(viewHolder.imageView);
この助けを願っています。