java.lang.IllegalStateException

来源:互联网 发布:plc编程自制功能块 编辑:程序博客网 时间:2024/06/06 00:11

java.lang.IllegalStateException

commit引起的

java.lang.IllegalStateExceptionCan not perform this action after onSaveInstanceStateandroid.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1448)android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1466)android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634)android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613)......

这个异常是由于执行commit fragment的时候,onSaveInstanceState已经在这之前被调用了。从调用堆栈可以看出异常是在checkStateLoss中抛出的

    private void checkStateLoss() {        if (mStateSaved) {            throw new IllegalStateException(                    "Can not perform this action after onSaveInstanceState");        }        if (mNoTransactionsBecause != null) {            throw new IllegalStateException(                    "Can not perform this action inside of " + mNoTransactionsBecause);        }    }

要抛出IllegalStateException 那么显然mStateSaved为true,而mStateSavad是在onSaveInstanceState的时候被设置为true。

解决方案

commit替换为commitAllowingStateLoss

commitAllowingStateLoss里面不会调用checkStateLoss 所以不会抛出异常

onBackPressed引起的

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState  at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)  at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399)  at android.app.Activity.onBackPressed(Activity.java:2066)  at android.app.Activity.onKeyUp(Activity.java:2044)  at android.view.KeyEvent.dispatch(KeyEvent.java:2529)  at android.app.Activity.dispatchKeyEvent(Activity.java:2274)  ......

同上的原因一样都是由checkStateLoss中抛出的异常

解决方案

override onBackPressed不调用super.onBackPressed, 自己调用finish销毁activity

@Override    public void onBackPressed() {//      super.onBackPressed();        finish();    }
0 0
原创粉丝点击