我有一個Android活動,它從URL抓取RSS提要,並使用SAX解析器將每個項目從XML粘貼到數組中。這一切都很好,但如預期的那樣,需要一些時間,所以我想使用AsyncActivity在後臺執行它。我的代碼如下:Android ASync任務ProgressDialog直到後臺線程完成後才顯示
class AddTask extends AsyncTask<Void, Item, Void> {
protected void onPreExecute() {
pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
}
protected Void doInBackground(Void... unused) {
items = parser.getItems();
for (Item it : items) {
publishProgress(it);
}
return(null);
}
protected void onProgressUpdate(Item... item) {
adapter.add(item[0]);
}
protected void onPostExecute(Void unused) {
pDialog.dismiss();
}
}
我在onCreate()
與
new AddTask().execute();
線items = parser.getItems()
工作正常通話 - items
是包含從XML每個項目的數組列表。我面臨的問題是,在開始活動時,我在onPreExecute()
中創建的ProgressDialog直到之後纔會顯示,方法已完成doInBackground()
。即我得到一個黑色的屏幕,一個長時間的停頓,然後是一個完整的項目列表。爲什麼會發生這種情況?爲什麼不是UI繪圖,ProgressDialog顯示,解析器獲取項目並逐漸將它們添加到列表中,然後ProgressDialog解散?
在「解析器獲取項目並逐步將它們添加到列表」部分中,緩慢的步驟將在解析中,並且此時不會向列表添加任何內容。因此,你所有的物品都會很快被撞到列表中,所以不要指望這裏有太多「增量」的效果。 – CommonsWare 2010-04-24 01:08:02
這是沒有問題的,我並不介意插入是如何「增量」的,我只想讓ProgressDialog在後臺工作完成時顯示出來,並在完成時消失。 – jackbot 2010-04-24 11:27:48