【发布时间】:2013-12-12 23:08:59
【问题描述】:
我在这个应用中有一个 Asynctask,我在 onPreExecute 中有一个 ProgressDialog。
ProgressDialog pDialog;
protected void onPreExecute() {
pDialog = new ProgressDialog(Synchronization.this);
pDialog.setMessage(Html.fromHtml("<b>Please Wait</b><br/>Working..."));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
并且,在 onPostExecute 中,我关闭了这个对话框。
protected void onPostExecute(ArrayList<Object> allShopsData) {
// TODO Auto-generated method stub
super.onPostExecute(allShopsData);
final ArrayList<Object> allShops = allShopsData;
// dismiss the dialog after getting all products
if(pDialog!=null && pDialog.isShowing())
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
ExpandableListView expandableList = (ExpandableListView) findViewById(R.id.expandlist);
expandableList.setDividerHeight(2);
expandableList.setGroupIndicator(null);
expandableList.setClickable(true);
MyExpandableAdapter adapter = new MyExpandableAdapter(taskList,
allShops);
adapter.setInflater(
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),
Synchronization.ref);
expandableList.setAdapter(adapter);
}
});
}
我在同步(我的主活动)onCreate() 中启动名为“task1”的异步任务。 现在,我在 MainActivity 中有一个菜单,我在其中取消了“task1”引用的 Asynctask,并创建了另一个 Asynctask 实例,将其分配给“task1”。
task1.cancel(true);
task1 = new GetShopsTask();
task1.execute(taskList);
但是在这里,我看到创建的一个进度对话框在 onPostExecute 之后关闭(我还可以看到我的视图在后台更新),但在此之后,另一个进度对话框弹出,它不会被关闭。 不确定,是什么部分造成的。有人可以帮忙吗?
【问题讨论】:
-
我不确定这是否会导致您的问题,但请从
onPostExecute()中删除runOnUiThread。这是不必要的,因为onPostExecute()在UI Thread上运行,它可能会导致问题/混乱 -
你在哪里定义
ProgressDialog?会不会是两个AsyncTasks 互相干扰,而第二个覆盖了第一个的pDialog引用? -
codemagic- 我刚刚从我的代码中删除了 runOnUiThread,但仍然是相同的行为。
-
SimonSays- 我尝试将其定义为实例变量以及 Asynctask 的本地变量。不幸的是,这没有任何区别。
标签: android android-asynctask progressdialog