【问题标题】:DialogFragment illegalstateException when showing from asynctasks从异步任务显示时出现 DialogFragment 非法状态异常
【发布时间】:2013-09-03 04:44:31
【问题描述】:
  1. 我有一个 asyncTaks 做一些后台操作导致更新 UI
  2. 用户启动 Activity,并启动 AsyncTask 来做一些后台工作。
  3. 用户点击主页键离开应用程序。 onSaveInstanceState() 被调用。
  4. AsyncTask 完成,并尝试根据 onPostexecute() 的结果显示 DialogFragment 或 LoginFragment。
  5. 因为它在 onSaveInstance() 之后执行 FragmentTransaction。发生 IllegaeStateException。
  6. 为了处理登录片段,我调用了 commitAllowingStateLoss();而不是提交(); .它解决了登录片段的问题

我的问题是我应该为我的对话片段做些什么。

private void networkError(){
    NetowrkErrorDialog mErrorDialog = NetowrkErrorDialog.newInstance();
    mErrorDialog.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen);
    mErrorDialog.setCancelable(false);
    if(mErrorDialog.isVisible()==false){
        mErrorDialog.show(mMainActivity.getSupportFragmentManager(), "networkerror");
    }

}

【问题讨论】:

    标签: android android-asynctask android-dialogfragment


    【解决方案1】:

    您的 AsyncTask 必须在活动上调用 onPause() 后立即停止。在 AsyncTask 上调用 cancel(true)。用户可以返回您的活动并重新开始。

    或使用IntentService

    【讨论】:

    • 我希望我的 asynctask 在后台运行,因为它们是为了 .
    • @SureshBora 不,它们用于“在用户看到您的 UI 时”进行后台处理。对于真正的后台处理(当用户离开您的 UI 时),请使用服务和通知。
    • 您可能不想在 onPause 中取消 AsyncTask,因为此时 Activity 仍然可见。如果您在 onStop 中执行此操作,它会在方向更改期间被取消,这也可能是不希望的。
    猜你喜欢
    • 2014-02-12
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多