錯誤:
java.lang.IllegalStateException: Activity has been destroyed
? ? at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1555)
? ? at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696)
? ? at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:667)
? ? at com.bumptech.glide.manager.RequestManagerRetriever.getSupportRequestManagerFragment(RequestManagerRetriever.java:187)
? ? at com.bumptech.glide.manager.RequestManagerRetriever.supportFragmentGet(RequestManagerRetriever.java:195)
? ? at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:104)
? ? at com.bumptech.glide.Glide.with(Glide.java:644)
? ? at com.meinong.activity.PickPhotoPreviewActivity.setRootView(PickPhotoPreviewActivity.java:51)
? ? at org.mn.frame.MNActivity.onCreate(MNActivity.java:141)
? ? at android.app.Activity.performCreate(Activity.java:6875)
? ? at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
? ? at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
? ? at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
? ? at android.app.ActivityThread.-wrap12(ActivityThread.java)
? ? at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)
? ? at android.os.Handler.dispatchMessage(Handler.java:102)
? ? at android.os.Looper.loop(Looper.java:163)
? ? at android.app.ActivityThread.main(ActivityThread.java:6221)
? ? at java.lang.reflect.Method.invoke(Method.java)
? ? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
? ? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.meinong.test/com.meinong.activity.PickPhotoPreviewActivity}: java.lang.IllegalStateException: Activity has been destroyed
? ? at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2706)
? ? at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
? ? at android.app.ActivityThread.-wrap12(ActivityThread.java)
? ? at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)
? ? at android.os.Handler.dispatchMessage(Handler.java:102)
? ? at android.os.Looper.loop(Looper.java:163)
? ? at android.app.ActivityThread.main(ActivityThread.java:6221)
? ? at java.lang.reflect.Method.invoke(Method.java)
? ? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
? ? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
網(wǎng)上所有跟這個錯誤有關(guān)的都是有fragment的activity但是我的act沒有fragment涨颜,所以不知道原因出在哪
一步步看源碼找到異常拋出的位置在android.support.v4.app.FragmentManagerImpl的enqueueAction()方法:
public void enqueueAction(Runnable action,boolean allowStateLoss) {
if (!allowStateLoss) {
checkStateLoss();
}
synchronized (this) {
if (mDestroyed ||mHost ==null) {
throw new IllegalStateException("Activity has been destroyed");
}
if (mPendingActions ==null) {
mPendingActions =new ArrayList();
}
mPendingActions.add(action);
if (mPendingActions.size() ==1) {
mHost.getHandler().removeCallbacks(mExecCommit);
mHost.getHandler().post(mExecCommit);
}
}
}
mDestroyed等于true或者mHost ==null。
繼續(xù)追查mHost的賦值只有一個地方,F(xiàn)ragmentManagerImpl的attachController()方法:
public void attachController(FragmentHostCallback host,
FragmentContainer container, Fragment parent) {
if (mHost !=null)throw new IllegalStateException("Already attached");
mHost = host;
mContainer = container;
mParent = parent;
}
mHost = host; --而attachController的調(diào)用在FragmentController的attachHost()方法:
public void attachHost(Fragment parent) {
mHost.mFragmentManager.attachController(
mHost,mHost /*container*/, parent);
}
而????的調(diào)用在FragmentActivity()的oncreate中 第一行泼诱。
但是我發(fā)現(xiàn)繼承FragmentActivity的類調(diào)用Glide.with方法竟然在super.onCreate(savedInstanceState);之前。擎勘。粉洼。
顯然Glide.with調(diào)用時mHost還沒有賦值,所以拋了異常IllegalStateException仅财。狈究。。
繼承的activity盏求,super.onCreate(savedInstanceState)一定要最先調(diào)用抖锥,切記切記!K榉!0醴稀!荆烈!