2011-06-12 44 views
0

我面临的问题是显示进度条onItem选项在选项菜单中选择。 我的代码是在这里:ProgressBar显示有点延迟点击选项菜单

​​

进度IsLogged方法完成后显示。

+0

不知道会发生什么...但是...为什么你从那里调用你的'AsyncTask'的方法?你不应该那样做......你应该从你的'AsyncTask'中发送那些空的消息,而不是从'onOptionsMenuItemClick'中发送。 – Cristian 2011-06-12 05:59:47

+0

这是真的,但异步任务是一个不同的类,而不是这个类的一部分。此外,我已经完成与简单的方法调用也(没有异步任务),然后也推迟:( – Sandy 2011-06-12 06:05:02

回答

1

您在AsyncTask之后立即致电get(),因为此方法等待,直到任务完成。您应该将try/catch块中的所有代码添加到AsyncTask.onPostExecute()方法中,并从该方法中取消对话框。

void doLogout() { 
    new LogoutTask().execute(); 
} 

void dispatchLogoutFinished() { 
    dismissDialog(Constants.PROGRESS_DIALOG); 
    if (MyApp.IsLoggedOut()) { 
     // do something 
    } else { 
     // do something else 
    } 
} 

private class LogoutTask extends AsyncTask<Void, Void, Void> { 
    protected void onPreExecute() { 
     TheActivity.this.showDialog(Constants.PROGRESS_DIALOG); 
    } 

    protected Void doInBackground(Void... params) { 
     return null; 
    } 

    protected void onPostExecute(Long result) { 
     TheActivity.this.dispatchLogoutFinished(); 
    } 
} 

而我不认为你需要发送消息给处理程序。 dispatchLogoutFinished()在UI线程上执行,所以不需要同步。

+0

如果我不会等待响应它将处理完成任务之前。此外,Aysnc任务是一个单独的类,所以不能打开/关闭对话框:( – Sandy 2011-06-12 06:07:30

+0

)如果您等待'AsyncTask'在UI线程中完成,使用'AsyncTask'变得不必要的复杂化并且没有意义。它被称为'AsyncTask',因为它是异步的,这就是为什么它通知UI线程如果'AsyncTask'是一个非静态的嵌套类,那么它包含一个外部类的引用,否则你可以传递一个'Activity'到'AsyncTask'的构造函数 – Michael 2011-06-12 06:35:50

+0

我已经删除了异步任务,但同样的问题仍然存在:( – Sandy 2011-06-12 07:12:50