【发布时间】: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