如何解決Can not perform this action after onSaveInstanceState
先分析問題發(fā)生原因
private void checkStateLoss() {
if (isStateSaved()) {
throw new IllegalStateException(
"Can not perform this action after onSaveInstanceState");
}
}
public boolean isStateSaved() {
// See saveAllState() for the explanation of this. We do this for
// all platform versions, to keep our behavior more consistent between
// them.
return mStateSaved ||mStopped;
}
通過分析源碼我們找到,當(dāng)activity執(zhí)行了onSaveInstanceState或onStop方法后,操作子fragment系統(tǒng)會(huì)檢測(cè)當(dāng)前狀態(tài)并拋出異常。
解決方法:
配合Lifecycle,我們只需要重寫添加:
lifecycleScope?.launchWhenResumed{
//show fragment dialog
}
這樣系統(tǒng)會(huì)自動(dòng)在resumed后再?gòu)棾鰀ialogfragment,也能避免Can not perform this action after onSaveInstanceState
這樣即使是activity在后臺(tái)情況下返回前臺(tái),也會(huì)立即彈窗。