仅在少数用户发生onSaveInstanceState后才能执行此操作

时间:2016-02-13 08:17:38

标签: android android-fragments

注意:请注意,此问题仅发生在千分之一的用户中且无法轻易复制

我在Play商店中有一个应用程序,它适用于大多数用户,但我偶尔会收到与特殊问题相关的崩溃日志。

Can not perform this action after onSaveInstanceState

我认为当我在调用onSavedInstanceState()之后尝试提交片段时会发生这种情况。但是AFAIK,onSavedInstanceState()将在onPause()后调用,我在活动的onCreate()内进行片段提交

这是代码

    @Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(R.mipmap.arrow_dark_gray);
    setSupportActionBar(toolbar);

    initFragments();

    ActionBar actionBar=getSupportActionBar();
    if(actionBar!=null){
    actionBar.setDisplayHomeAsUpEnabled(true);
    }

    }


//This function is called from onCreate method.
  private void initFragments() {

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    MyFragment = new MyFragment();


    Bundle bundle = new Bundle();
    bundle.putSerializable(Constants.DATA, customAdapter);

    myFragment.setArguments(bundle);
    fragmentTransaction.replace(R.id.shopping_container, myFragment);
    fragmentTransaction.commit();
  }

很明显我在commit()内做onCreate()。是否有可能在onCreate() onSavedInstanceState()期间因某些配置更改或操作系统内存不足而被调用。那就是为什么会发生这种崩溃?

commit()替换为commitAllowingStateLoss()是解决此问题的最佳解决方案吗?

1 个答案:

答案 0 :(得分:0)

我有同样的问题,commitAllowingStateLoss()工作正常。

如果您需要更多信息,可以查看以下答案:

https://stackoverflow.com/a/18345684/3742122