1

我的应用程序支持最低版本 api 15。isDestroyed()方法支持最低 api 17。

因此,当我使用此方法时,在 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)

我能做些什么?

4

2 回答 2

3

您可能在 onSaveInstanteState 之后或从其他一些 android 无法保证它能够恢复状态的位置提交片段。

您可以改用commitAllowingStateLoss(),不要使用isDestroyed(). 我想您也可以检查是否getActivity()为空,并且仅在它为非空时才提交。如果片段被分离,它将为空。

[编辑]

您还可以使用提供此方法的支持库:

http://developer.android.com/reference/android/support/v4/app/FragmentManager.html#isDestroyed()

(奇怪,但从您的异常看来您正在使用支持库)

于 2015-12-29T09:45:53.257 回答
2

我有同样的问题。我在活动中创建了一个布尔变量destroyed并将其设置onDestroy()true、。然后我在变量之后检查了你的点,而不是调用方法,这是行不通的。onCreate()falsedestroyedisDestroyed()

我知道这可能不是最好的解决方案,对你来说可能为时已晚,但它对我有用,我希望我能帮助别人。

于 2017-04-21T14:38:30.880 回答