回答
您在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线程上执行,所以不需要同步。
如果我不会等待响应它将处理完成任务之前。此外,Aysnc任务是一个单独的类,所以不能打开/关闭对话框:( – Sandy 2011-06-12 06:07:30
)如果您等待'AsyncTask'在UI线程中完成,使用'AsyncTask'变得不必要的复杂化并且没有意义。它被称为'AsyncTask',因为它是异步的,这就是为什么它通知UI线程如果'AsyncTask'是一个非静态的嵌套类,那么它包含一个外部类的引用,否则你可以传递一个'Activity'到'AsyncTask'的构造函数 – Michael 2011-06-12 06:35:50
我已经删除了异步任务,但同样的问题仍然存在:( – Sandy 2011-06-12 07:12:50
- 1. 在菜单项上点击显示div's
- 2. 在点击菜单选项
- 3. 点击菜单项
- 4. Robotium测试选项菜单项点击
- 5. QML - 通过点击事件显示菜单栏或菜单项
- 6. ASP:菜单我只需要点击显示子菜单项
- 7. 选项菜单上显示的空白屏幕点击
- 8. Jquery选项卡显示子菜单点击事件
- 9. 延迟点击事件
- 10. Jquery点击自动延迟?
- 11. JQuery Tooltipster延迟点击
- 12. 延迟的链路点击
- 13. 更改长点击延迟
- 14. 延迟上(“点击”)事件
- 15. 菜单项显示其子项的延迟时间
- 16. 无法点击硒从菜单选项
- 17. 捕获选项菜单微调点击
- 18. 通过点击菜单选项
- 19. AppleScript的点击菜单栏选项
- 20. 点击显示Superfish下拉菜单
- 21. 点击任何项目时显示菜单项
- 22. 菜单项无法点击
- 23. 模拟菜单项点击
- 24. 在点击菜单项
- 25. JQuery菜单项点击?
- 26. WPF菜单 - 中级菜单项点击
- 27. 在图像按钮上点击显示溢出菜单点击
- 28. 如何让菜单项可点击并在点击android后显示烤面包?
- 29. 菜单项被点击...没有反应
- 30. ViewPager&选项卡:点击标签后的延迟
不知道会发生什么...但是...为什么你从那里调用你的'AsyncTask'的方法?你不应该那样做......你应该从你的'AsyncTask'中发送那些空的消息,而不是从'onOptionsMenuItemClick'中发送。 – Cristian 2011-06-12 05:59:47
这是真的,但异步任务是一个不同的类,而不是这个类的一部分。此外,我已经完成与简单的方法调用也(没有异步任务),然后也推迟:( – Sandy 2011-06-12 06:05:02