我的应用程序支持最低版本的api 15。并且isDestroyed()
方法支持min-api17。
所以当我使用这个方法时,api 17下面没有这样的方法错误。
用户按下主页按钮并使用其他应用程序。打开我的应用程序活动实例后被销毁,当我使用此活动实例时,我得到一个错误:
Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(Unknown Source)
at android.support.v4.app.BackStackRecord.commitInternal(Unknown Source)
at android.support.v4.app.BackStackRecord.commit(Unknown Source)
我能做什么?
您可能在onSaveInstantState之后,或者在android无法保证能够恢复状态的其他位置提交片段。
您可以使用commitAllowingStateLoss()
,而不使用isDestroyed()
。我想您也可以检查getActivity()
是否为null,并且只有当它不是null时才提交。如果片段被分离,它将为null。
[编辑]
您也可以使用提供这种方法的支持库:
http://developer.android.com/reference/android/support/v4/app/FragmentManager.html#isDestroyed()
(奇怪,但从您的异常来看,您似乎正在使用支持库)
我也遇到了同样的问题。我在活动中创建了一个布尔变量destroyed
,并在onDestroy()
到true
、onCreate()
到false
中设置它。然后我在变量destroyed
之后检查了您的点,而不是调用方法isDestroyed()
,这是不起作用的。
我知道这可能不是最好的解决方案,对你来说可能已经晚了,但它对我有效,我希望我能帮助别人。