java - 后台任务 fragment 和 "Can not perfom this action after onSaveInstanceState"

标签 java android multithreading android-fragments

我在 fragment 中有以下 AsyncTask (为了清楚地显示错误而简化了示例):

private class LoginTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {

        // Do network login
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        FragmentActivity act = (FragmentActivity) getActivity();
        if (act != null && isAdded()) {
            act.getSupportFragmentManager().beginTransaction()
                    .add(new LoginDialogFragment(), "loginMessage").commit();
        }
    }

}

有一次,在任务运行时离开应用程序时,我收到了 IllegalStateException:在 onSaveInstanceState 之后无法执行此操作

我想这是因为我在 Activity 的 onSaveInstanceState 和从 Activity 中取消附加 fragment 之间调用了它(或者因为在 getActivity() 调用和 add-fragment 调用之后 Activity 未附加)。

那么我以后怎样才能避免这个错误呢?谢谢!

最佳答案

isFinishing()方法在这里应该对你有帮助。

@Override
    protected void onPostExecute(Void result) {
        FragmentActivity act = (FragmentActivity) getActivity();
        if (act != null && !act.isFinishing() && isAdded()) {
            act.getSupportFragmentManager().beginTransaction()
                    .add(new LoginDialogFragment(), "loginMessage").commit();
        }
    }

关于java - 后台任务 fragment 和 "Can not perfom this action after onSaveInstanceState",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342923/

相关文章:

java - spring-data 带下划线的属性名称不可转义,如文档所述

android - ArrayList 只存储两个值

java - 将 FileWatcher 与多线程结合使用

java - ThreadPoolExecutor.execute() 的内存可见性保证

java - 简单的 Java 程序奇怪的输出

java - 如何为JButton设置自定义渐变?

android - 是否有任何理由从资源中预加载可绘制对象?

multithreading - 在 Kotlin 中使用线程还是协程更好?

java - 如何在 Debug模式下更改常量值

java - HashMap 和垃圾回收 : do I need to call clear() before variable re-assignment?