在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%处于后台,因此我认为代码开始运行,用户进入后台,然后便会简单地崩溃
问题是... 解决问题的正确方法是什么...我讨厌在可预测的情况下捕获异常