国家损失管理

时间:2014-11-11 11:38:44

标签: android android-activity android-fragments android-asynctask android-lifecycle

我有一个活动A,其中包含一个登录片段和一个包含Home Fragment的活动B. 在成功登录请求(异步)后,我将从Login Fragment启动B. 我在登录片段中有一个回调监听器:

onSuccess(result) {
    startActivity(B);
}

今天我遇到了这个错误的错误:getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState"

我认为这不是一个错误,无论如何我不知道如何解决这个问题。 This blog post建议避免异步回调方法中的事务,是的,但是如何? commitAllowingStateLoss()应该作为最后的手段使用:万一,我应该在Activity B创建方法的Home Fragment事务中使用它吗?

基本上,我应该怎么做才能在异步回调后启动另一个活动?

1 个答案:

答案 0 :(得分:0)

你应该在AsyncTask中使用onPostExecute(result):

private class LoginTask extends AsyncTask<parameters,...> {
...
protected void onPostExecute(Long result) {
         //if result successful start ActivityB
     }
}

在asynctask完成后Onpost会触发。 它在UI线程上运行,以便解决您的问题。

将它放在您的主要活动中:

public void  run(){
        //code you would normally have after task completes
    }

然后把它放在你的onSuccess:

mainactivity.runUIonthread()