2015-10-27 11 views
17

私は、ユニバーサルImage LoaderからGlideに移動し始めました。しかし、recyclerviewでスクロールして再びスクロールすると、たくさんの警告メッセージが表示されます。RecyclerviewのGlideを使った警告

W/Bitmap: Called reconfigure on a bitmap that is in use! This may cause graphical corruption! 

グライドを別の画像ロードライブラリに置き換えた場合、警告が消えてしまいます。 bindViewHolder内のコード画像に関連:

Glide.with(viewHolder.imageView.getContext()) 
      .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600)) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(viewHolder.imageView); 
ネクサスでテスト

5.

+0

Android Mではこれが起こっていますか? https://github.com/bumptech/glide/issues/743 – TWiStErRob

答えて

0

これはhere議論され、

通常、これはビットマップを悪用した結果である、のいずれか ビットマップを返すことによって、中間のgetを使わずにプールに複数回、または対応する ターゲットでclear()を呼び出した後に がビットマップを参照している。カスタム変換をお持ちの場合は、 をよく見て、ビットマップをプールに返さないようにしてください。 この問題の詳細は、wiki: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glideでご覧になれます。

ログはcatchブロック(キャッチされた例外)からのものです。

  • は、ターゲットビューを再利用するためのリソースをクリアしていますがrecyclerViewを使用しているので、

を参照の資源化に上保持していない

  • 1つのターゲットビューに2ビットマップをロードしようとしていない:あなたがしていることを確認してくださいおそらく2番目のポイントは真です。つまり、すべてのビットマップ参照を保持しながらビューをリサイクルします。

  • +0

    私は問題を完全に理解しているかどうかはわかりません。私はカスタムリサイクルをしていない、私はリサイクルビューからbindViewHolderの画像を読み込むだけです。この問題は、スクロールしてイメージが再度読み込まれるときに発生します。私はGlideで手動で処理する必要がありますか?以前はUILしか使用しておらず、このような問題は発生しませんでした。 – Bendik

    +0

    @ケイ、「キャッチブロック」はあなたを指していますか?私はそれがネイティブの[Bitmap.cpp](https://github.com/android/platform_frameworks_base/blob/marshmallow-release/core/jni/android/graphics/Bitmap.cpp#L256)からの警告であることを発見しました。 – TWiStErRob

    +3

    この回答は正確ではありません。見積もりではIllegalArgumentExceptionを参照していますが、警告はここではありません。元の質問の警告はGlideの通常の使用中に発生し、ビットマップを誤って使用した結果ではありません。 –

    1

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

    EDIT:グライドのGithub上の問題を開いた後からhttps://github.com/bumptech/glide/issues/743、私は私のorignal「解決策」はメッセージのみを非表示にし、問題を解決しなかったことがわかりました。この警告はAndroid Bitmapからのもので、Glideがより良いパフォーマンスを得るためにBitmapを再利用するためです。

    +0

    RecyclerViewのアイテムビュー数を増やすと、必要以上に多くのメモリが使用されることに注意してください。 – TWiStErRob

    +0

    @TWiStErRob - あなたが正しいです。私はむしろ誤解を招く人が誤った経路に出るのを防ぐために答えを編集しました。 – JirkaV

    0

    画像をロードする前にGlide.clear()を呼び出してみてください。

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

    このヘルプが必要です。

    +3

    Glide.clear()を追加しても問題が解消されませんでした:( – tieorange

    0

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

    フレームレイアウト内に画像ビューを配置すると、グラフィックの破損がなくなりました。

    +0

    は私のためには機能しませんでした: –

    0

    AndroidスタジオのLogcatフィルタでログを消去することができます。

    をAndroidのLogcatフィルタに追加します。