2015-10-27 83 views
17

我剛剛開始從Universal Image Loader移動到Glide。但是,在recyclerview中滾動再次滾動時,我會收到大量警告消息。在Recyclerview中使用Glide的警告

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.

+0

Android M上發生這種情況嗎? https://github.com/bumptech/glide/issues/743 – TWiStErRob

回答

0

此討論here

通常這是濫用位圖的結果,方式是通過返回 位圖多次訪問池而沒有獲得中間值,或者在調用對應的 目標上的clear()之後引用位圖。如果你有自定義轉換,這是一個很好的地方 仔細看看,以確保你沒有返回一個位圖到池 兩次。您可以在wiki上看到更多關於此問題的信息: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide

您看到的日誌來自catch塊(捕獲異常)。請確保您有:

  • 不嘗試加載2位圖一個目標視圖
  • 不清除的資源再利用的目標的看法,但抱着一種資源,因爲你正在使用recyclerView參考

,可能第二點是真實的,即回收視圖,同時堅持所有位圖引用

+0

我不確定我完全理解這個問題。我沒有做任何自定義回收,我只從RecyclerView的bindViewHolder中加載圖像。當我向上滾動時會出現問題,並且圖像再次加載。這是我必須用Glide手動處理的東西嗎?之前只使用過UIL,並沒有遇到這樣的問題。 – Bendik

+0

@凱,你指的是「catch block」?我發現這是來自本地[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)上首次運行我的應用後遇到同樣的問題。

編輯:在Glide Github上打開問題 - https://github.com/bumptech/glide/issues/743後,我發現我的原始「解決方案」沒有解決問題,只隱藏了信息。警告來自Android位圖,這是因爲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 Studio上的Logcat篩選器清理日誌。

在Android Logcat過濾器的正則表達式中添加^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)