我的应用上有一些活动可以访问网络服务。由于我不想占用主线程,因此该代码位于AsyncTask中。但是,我不希望用户在调用Web服务时操作Activity,因此在执行AsyncTask之前,我会显示一个旋转并阻塞屏幕的ProgressDialog。在AsyncTask的onPostExecute方法中,我要做的第一件事是关闭ProgressDialog。
这应该可以防止用户在没有实际阻塞主线程的情况下操作Activity。
但是,我注意到有几次ProgressDialog 从不被解雇,用户卡住了。 AsyncTask已完成,onPostExcute已执行,但仍显示ProgressDialog。 ProgressDialog没有机会被解雇,用户被卡在屏幕上。他们唯一的选择是访问Android设置应用并强行停止我的应用。
有谁知道为什么会这样?我该怎么做才能解决它?
相关代码:
这是我展示ProgressDialog并启动任务的方式:
mProgress = ProgressDialog.show(this, "", "Syncing...", true);
(new MyAsyncTask()).execute(intUserId);
这是该任务的onPostExcute。没有“@Override”
protected void onPostExecute(Boolean result) {
if (mProgress != null) {
mProgress.dismiss();
mProgress = null;
}
}
答案 0 :(得分:1)
检查一下:
asynctack.execute()
。onPostExcute()
上使用@Override以确保它已正确定义。答案 1 :(得分:0)
也许尝试在onPreExecute()方法中显示你的ProgressDialog?
protected void onPreExecute() {
mProgress = ProgressDialog.show(this, "", "Syncing...", true);
}
给它一个镜头,看它是否有效。
答案 2 :(得分:0)
Peter Knego在OP的评论中发布了以下链接。 CommonsWare的解决方案似乎运作良好。
Backround task, progress dialog, orientation change - is there any 100% working solution?