在onPause中解除片段

时间:2014-06-14 10:01:17

标签: android android-fragments

我在Android 4.2上遇到IllegalStateException的应用程序崩溃(我的应用程序支持3.1+)。在对文档进行了一些挖掘之后,我发现对onPause()onSaveInstanceState()的来电顺序没有任何保证。您唯一知道的是在onSaveInstanceState()之前调用onStop()。所以我的问题是:在这种情况下最好的做法是什么?

我的代码:

@Override
protected void onResume() {
    super.onResume();
    if (connectionInProgress) {
        cd = ConnectingDialog.findOrCreate(getFragmentManager());
        cd.show(getFragmentManager(), ConnectingDialog.TAG);
    }
}

@Override
protected void onPause() {
    if (cd != null)
        cd.dismiss();
    super.onPause();
}

1 个答案:

答案 0 :(得分:1)

我之前遇到过这种情况。问题是,一旦android保存活动的实例状态,他们就不允许更改该状态。添加,替换,删除该活动的碎片将违反此法律,因此Android认为该活动属于非法"州。 ;)

修复可以简单如下:

@Override
protected void onSaveInstanceState() {
    mHasSavedInstance = true;
    super.onSaveInstanceState();
}

@Override
protected void onResume() { 
    super.onResume();
    mHasSavedInstance = false;
}

@Override
protected void onPause() { 
    if (cd != null && !mHasSavedInstance)
        cd.dismiss();
    super.onPause();
}