1. 程式人生 > >RecyclerView在Fragment Activity切換報錯You cannot start a load for a destroyed activity

RecyclerView在Fragment Activity切換報錯You cannot start a load for a destroyed activity

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity

BottomNavigationView中Fragment切換或者各種Activity切換的時候(這些Activity,Fragment裡有RecyclerView載入網路資料)

 

報錯如下

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.appjishu.starzone, PID: 25262
                  java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
                      at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:312)
                      at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:131)
                      at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:115)
                      at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:119)
                      at com.bumptech.glide.Glide.with(Glide.java:697)
                      at razerdp.github.com.ui.imageloader.ImageLoadMnanger$GlideDispatcher.getGlide(ImageLoadMnanger.java:80)
                      at razerdp.github.com.ui.imageloader.ImageLoadMnanger.loadImage(ImageLoadMnanger.java:50)
                      at razerdp.github.com.ui.imageloader.ImageLoadMnanger.loadImage(ImageLoadMnanger.java:46)
                      at razerdp.github.com.ui.imageloader.ImageLoadMnanger.loadImage(ImageLoadMnanger.java:42)
                      at com.appjishu.starzone.activity.circle.FriendCircleActivity$HostViewHolder.loadHostData(FriendCircleActivity.java:575)
                      at com.xxx.activity.circle.FriendCircleActivity$MyHandler.handleMessage(FriendCircleActivity.java:606)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:157)
                      at android.app.ActivityThread.main(ActivityThread.java:5883)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:515)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
                      at dalvik.system.NativeStart.main(Native Method)
D/Process: killProcess, pid=25262
           com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:131 android.support.v7.app.AppCompatDelegateImplBase$1.uncaughtException:66 com.xiaomi.mipush.sdk.z.uncaughtException:-1 
Disconnected from the target VM, address: 'localhost:8601', transport: 'socket'

原因,在更新UI的時候,這個Activity已經被destroy了。 

辦法。 

在Activity或者Fragment裡的onDestroy()裡把RecyclerView.Adapter 和RecyclerView的例項設為null.就行了。

例如

public void onDestroy() {
        if (friendAdapter != null) {
            friendAdapter = null;
        }
        if (friendRecyclerView != null) {
            friendRecyclerView = null;
        }
        super.onDestroy();
    }

這樣,退出這個Activity的時候就會自動銷燬這個adapter和recyclerview了。 

如果還報相同的錯誤。 建議在自己的操作前面加上if判斷, 確保自己的邏輯程式碼執行時這個Activity是活的

if (activity != null && !activity.isDestroyed() {
// 自己的邏輯程式碼
}