问题描述
|
我在选项菜单中显示进度条onItem时遇到问题。
我的代码在这里:
case R.id.mnulogout:
showDialog(Constants.PROGRESS_DIALOG);
cloSEOptionsMenu();
if(MyApp.IsLoggedOut())
handler.sendEmptyMessage(Constants.logoUT);
else
handler.sendEmptyMessage(Constants.ERROR_MSG);
IsLogged方法完成后,将显示进度栏。
解决方法
您正在
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();
}
}
而且我认为您不需要向处理程序发送消息。 ѭ5是在UI线程上执行的,因此不需要同步。