1. 程式人生 > >Glide-You cannot start a load for a destroyed activity

Glide-You cannot start a load for a destroyed activity

場景:

在獲取本地相簿的時候,載入大量資料,開啟介面,然後很快finish介面,就會出現You cannot start a load for a destroyed activity,因為finish的時候,圖片還沒有被夾在完,Glide.with(mContext).load(bitmapLast).into(binding.itemPhoto);mContext為空導致,所以需要判斷activity是否ondestory().

 

最後在AS裡面搜尋RequestManagerRetriever才發現是Glide裡面的類,具體定位到:

 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    private static void assertNotDestroyed(Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed()){
            throw new IllegalArgumentException("You cannot start a load for a destroyed activity");
        }
    }1

 

很明顯說的是Activity已經被Destroy了所以報錯。

 

解決方案:

在我的SplashActivity 類裡面有一個Handler的延時顯示網路圖片的操作,當Handler發出訊息時SplashActivity已經被Destroy了所以導致Glide報錯,這裡只需要判斷一下當前Activity是否被Destroy了就好了:

 

//判斷Activity是否Destroy
public static boolean isDestroy(Activity activity) {
        if (activity == null || activity.isFinishing() || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed())) {
            return true;
        } else {
            return false;
        }
    }12345678

呼叫:
虛擬碼

 

if(!isDestroy(activity)){
    Glide.with(activity).into(imageview);
}123

 

上面只是大致程式碼,具體邏輯參照自己的業務。

 

其實報錯的地方不止上面一處,還有一處是在Fragment裡面呼叫的時候。下面給出在Fragment 裡面解決方案:

 

Fragment

 

在Fragment裡面我們就不是判斷Destroy方法了,而是isAdded() 方法,這是Fragment 給我們提供的方法,用來判斷當前Fragment是否新增到Activity了。這裡樓主是在網路請求成功後做判斷:

 

虛擬碼:

 

 

 

RequestUtils.get(url).callback(){
        @Override
        public void onHttpRequestSuccess() {
            f (!isAdded()) {
                return;
            }
            Glide.with(this).into(imageview);
        }
}123456789

 

以上就是使用Glide 在Acitivty 和 Fragment裡面出現的問題及解決方式。

 

不過在解決問題的途中還發現有網友說將Glide.with(this) 裡面的this換成mContext.getApplicationContext() 也就是生命週期同App一樣了,在這裡樓主覺得不妥,事實上此方法對樓主也無效;Glide既然給我們提供了不同型別的傳參,說明對生命週期這塊也是有考量;傳入全域性只會消耗更多記憶體,當然有特殊需求例外。
---------------------
作者:Mackkill
來源:CSDN
原文:https://blog.csdn.net/mackkill/article/details/78068203
版權宣告:本文為博主原創文章,轉載請附上博文連結!