【问题标题】:Android: error adding frament to the activityAndroid:将片段添加到活动时出错
【发布时间】:2019-04-15 01:18:41
【问题描述】:

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% 都在后台,所以我认为代码启动,用户进入后台然后它只是简单的崩溃

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

【问题讨论】:

    标签: android android-fragments android-activity fragmentmanager


    【解决方案1】:

    您可以通过isStateSaved() 直接检查 FragmentManager 是否已保存其状态 - 如果未保存状态,您应该只在您的对话框中使用show()

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多