我在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();
}
答案 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();
}