這個問題可以看作是ft.commit()和ft.commitAllowingStateLoss()的區(qū)別雇盖,在Activity的onSaveInstanceState()方法之后再commit會拋出異常亮蒋。看源碼:commit()內(nèi)部實(shí)現(xiàn)這個方法
會先判斷事務(wù)是否被提交過集币,再提交會報異常晴竞,所以每次都是開啟一個新事務(wù)亲族;最后調(diào)FragmentManager的enqueueAction方法里的checkStateLoss()方法:
如果Activity調(diào)用過onSaveInstanceState()或者onStop()則isStateSaved()方法返回true,這時就會拋出異常拂蝎。
解決辦法:使用dismissAllowingStateLoss()方法替換穴墅,因?yàn)閐ismissAllowingStateLoss中調(diào)用的是commitAllowingStateLoss()方法,此方法內(nèi)的enqueueAction方法入?yún)llowStateLoss為true温自,跳過checkStateLoss()方法玄货,不會拋出異常。