RecyclerView在Fragment Activity切换报错You cannot start a load for a destroyed activity

版权声明:本文为刘少明原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsm135/article/details/82112686

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() {
// 自己的逻辑代码
}

猜你喜欢

转载自blog.csdn.net/lsm135/article/details/82112686