gpt4 book ai didi

android - 撤销权限后出现 IllegalStateException

转载 作者:行者123 更新时间:2023-11-29 19:15:04 24 4
gpt4 key购买 nike

用户在设置中撤销权限并从后台返回后,我的应用程序崩溃并出现 IllegalStateException:在 onSaveInstanceState 之后无法执行此操作。我看到操作系统试图从后台重新创建 fragment 堆栈(重新启动应用程序不会导致崩溃)。我已经尝试使用标志捕获撤销操作,如果为真,则只向用户显示一个对话框,通知用户重新启动应用程序。但是在显示对话框之后,操作系统仍然继续尝试重新创建堆栈,因此崩溃了。

如果标志为真,我也尝试弹出所有 fragment ,但没有成功。

Google 开发人员表示,撤销权限会导致应用程序失去功能,但崩溃远不止失去功能那么简单。如何在显示对话框后暂停应用程序?

最佳答案

撤销权限会杀死您未销毁的 Activity,当您返回时,它们可能会通过 savedInstanceState 恢复,而不是您测试的通常方式。

您发布的异常意味着您的代码在 onSaveInstanceState( )(或onPause()onStop(),它们通常在之后调用),或者由于某些异步操作而忘记取消当 Activity 最小化时。

为了安全起见,我通常会跟踪是否可以提交 FragmentTransactions,就像这样

public abstract class BaseActivity extends AppCompatActivity {

private boolean mFragmentTransactionsAllowed;

@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFragmentTransactionsAllowed = true;
}

@Override
protected void onStart() {
super.onStart();
mFragmentTransactionsAllowed = true;
}

@Override
protected void onResume() {
super.onResume();
mFragmentTransactionsAllowed = true;
}

@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
mFragmentTransactionsAllowed = false;
}

protected final boolean areFragmentTransactionsAllowed() {
return mFragmentTransactionsAllowed;
}
}

在提交之前我会检查

if (areFragmentTransactionsAllowed()) {
ft.commit();
}

关于android - 撤销权限后出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com