RecyclerView在Fragment Activity切換報錯You cannot start a load for a destroyed activity
阿新 • • 發佈:2019-01-07
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() {
// 自己的邏輯程式碼
}