web-dev-qa-db-ja.com

RecyclerviewでGlideを使用した警告

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でテスト済み。

16
Bendik

Android M(Nexus 5x)でアプリを初めて実行した後、同じ問題が発生します。

EDIT:Glide Githubで問題を開いた後 https://github.com/bumptech/glide/issues/74 、元の「解決策」では問題が解決せず、メッセージを非表示にするだけであることがわかりました。警告はAndroidビットマップからのものです。これは、Glideがビットマップを再利用してパフォーマンスを向上させるためです。

1
JirkaV

これは議論される ここ

通常、これはビットマップを誤って使用した結果です。中間のgetなしでビットマップをプールに複数回返すか、対応するターゲットでclear()を呼び出した後にビットマップを参照します。カスタム変換がある場合は、ビットマップをプールに2回返さないように注意深く調べるのに適した場所です。この問題の詳細については、wikiで確認できます: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide

表示されるログは、catchブロックからのものです(caught例外)。あなたがいることを確認してください:

  • 1つのターゲットビューに2つのビットマップをロードしようとしない
  • リソースをクリアしてターゲットビューを再利用するのではなく、リソースの参照を保持する

recyclerViewを使用しているので、おそらく2番目のポイントは当てはまります。つまり、すべてのビットマップ参照を保持しながらビューをリサイクルします。

0
blockwala

警告とグラフィックの破損が発生していました。これは、リサイクラービューの上部と下部に表示されるクリップされたビットマップの形式であり、スクロールが速すぎるとそのままになります。

フレームレイアウト内にイメージビューを配置することで、グラフィックの破損が解消されました。

0
Meanman

Android StudioのLogcat Filtersでログをクリーンアップできます。

Android Logcatフィルターの正規表現に^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)を追加します。

0
Avinash S

画像を読み込む前にGlide.clear()を呼び出してみてください。

Glide.clear(viewHolder.imageView);
Glide.with(viewHolder.imageView.getContext())
        .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(viewHolder.imageView);

この助けを願っています。

0