1. 程式人生 > >Glide坑之無法載入圖片

Glide坑之無法載入圖片

專案中碰到的問題,3.7的版本,一個控制元件上圖片無法載入,因為是回撥載入,發現load方法確實走了,但是沒有回撥,成功失敗的都沒有。網路沒問題、使用沒問題,那還是原始碼走起吧。

從Glide的with(),方法開始追逐,直到追逐到了這個方法


方法中有個isPaused變數,這個變數其實就是標識這個請求的狀態。大家看到這個變數是否會聯想到Activity、Fragment的onPause的生命週期方法呢?是的,Glide圖片載入和生命週期有密切的關係,這裡延伸一下,方便大家理解Glide內部做的諸多優化。

    其實分析到這裡,大家思考就可以找到這個問題的原因了。請求邏輯走到這裡,通過isPaused變數判斷,正常情況下應該走到begin()這個分支去載入圖片。否則進了pendingRequests佇列,自然無法去載入圖片。再延伸一下,這個pendingRequest相當於一個請求佇列,Glide也提供了api用來一次性將這個佇列中的請求一次性執行,因此這個api是可以解決這個問題的。

    最終專案中這個問題是如何處理的呢?通過梳理,這個載入圖片的時候,介面被遮住了所以isPaused變數為true,介面resume的時候也沒有重新呼叫載入圖片的邏輯。根據業務考慮,最終我們採用的方式是Glide初始化的時候綁定了Application物件,從這裡也可以看出Gldie的一個特性,和介面是生命週期同步,如何做到的呢,也不復雜,綁定了一個fragment。