安卓:向活动添加框架时出错



安卓上有一些我讨厌的特殊之处......

围绕活动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%在发生时都在后台,所以我认为代码启动,用户进入后台然后它只是崩溃

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

你可以通过isStateSaved()直接检查FragmentManager是否保存了它的状态 - 只有在状态没有保存的情况下,你才应该show()你的对话框。

最新更新