Android:在活动中添加Frament时出错

时间:2019-04-15 01:18:42

标签: android android-fragments android-activity fragmentmanager

在Android上有一些我讨厌的特质...

isFinishing()活动中的问题最严重。
我确实知道在此过程之后或过程中不允许执行某些操作,但是我们必须检查的唯一方法是使用此方法,某些方法无效,因此我举一个非常简单的示例,请指导我如何解决最佳做法:

我想在屏幕上添加片段

if(!this.isFinishing() && getSupportFragmentManager().findFragmentByTag(VerifyIdentityDialog.CHALLENGE_DIALOG_TAG) == null)
try {
      new VerifyIdentityDialog((ChallengeRequiredException) e, new DefaultVerifyIdentityListener())
              .show(getSupportFragmentManager(), VerifyIdentityDialog.CHALLENGE_DIALOG_TAG);
  } catch (Exception e1) {
      Crashlytics.logException(e1);
  }

此代码仅在MainThread上运行,它在尝试之前明确检查活动是否已完成,但仍然有大约2%的用户遇到异常...

例外是:

java.lang.IllegalStateException
Can not perform this action after onSaveInstanceState

[避免粘贴长堆栈跟踪信息,因为它是默认的android异常,相关代码已在上面提到]

1-在我在if中添加!this.isFinishing()之前,该异常的发生频率更高,但仍无法100%解决 2-根据Crashlytics的说法,当发生事故时,有97%处于后台,因此我认为代码开始运行,用户进入后台,然后便会简单地崩溃

问题是... 解决问题的正确方法是什么...我讨厌在可预测的情况下捕获异常

1 个答案:

答案 0 :(得分:0)

您可以直接通过isStateSaved()检查FragmentManager是否已保存其状态-如果未保存状态,则仅应show()对话框。