弹出backstack时出现Android异常

时间:2016-03-17 06:31:55

标签: android illegalstateexception

这是对这些问题的后续问题: popBackStack() after saveInstanceState() Application crashes in background, when popping a fragment from stack

我正在创建一个使用服务的应用程序,并对服务创建的事件做出反应。其中一个事件在片段内调用,并从后台弹出,如下所示:

getSupportFragmentManager().popBackStack(stringTag, FragmentManager.POP_BACK_STACK_INCLUSIVE);

当应用程序位于前台时,它可以正常工作。当应用程序在后台时,我得到一个

  

IllegalStateException:无法在onSaveInstanceState

之后执行此操作

我已尝试使用空方法覆盖onSaveInstanceState

为什么我只在应用程序处于后台时才能获得此异常,我该如何解决?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。

public abstract class PopActivity extends Activity {

        private boolean mVisible; 

       @Override
        public void onResume() {
            super.onResume();
            mVisible = true;
        }

        @Override
        protected void onPause() {
            super.onPause();
            mVisible = false;
        }

        private void popFragment() {
            if (!mVisible) {
                return;
            }

            FragmentManager fm = getSupportFragmentManager();
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }

当您在恢复应用程序时单独实现上述代码时,您会发现自己处于一个实际上想要弹出的片段中。您可以使用以下剪辑来解决此问题:

public abstract class PopFragment extends Fragment {

    private static final String KEY_IS_POPPED = "KEY_IS_POPPED";
    private boolean mPopped;

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(KEY_IS_POPPED, mPopped);
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            mPopped = savedInstanceState.getBoolean(KEY_IS_POPPED);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mPopped) {
            popFragment();
        }
    }

    protected void popFragment() {
        mPopped = true;
        // null check and interface check advised
        ((PopActivity) getActivity()).popFragment();
    }
}

Original Author