0

我正面临在选项菜单中显示进度条 onItem 的问题。我的代码在这里:

case R.id.mnuLogout:

                showDialog(Constants.PROGRESS_DIALOG);
                closeOptionsMenu(); 

                             if(MyApp.IsLoggedOut())
                    handler.sendEmptyMessage(Constants.LOGOUT);
                 else
                        handler.sendEmptyMessage(Constants.ERROR_MSG);  

完成 IsLogged 方法后显示进度条。

4

1 回答 1

1

您在 as 执行后立即调用get()AsyncTask失去异步行为,因为此方法一直等到任务完成。您应该将 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 线程上执行,因此不需要同步。

于 2011-06-12T06:03:09.270 回答