我在 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/