单击选项菜单时,ProgressBar会显示延迟

问题描述

| 我在选项菜单显示进度条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线程上执行的,因此不需要同步。