URL から RSS フィードを取得し、SAX パーサーを使用して XML の各項目を配列に貼り付ける Android アクティビティがあります。これはすべて正常に機能しますが、予想どおり、少し時間がかかるため、AsyncActivity を使用してバックグラウンドで実行したいと考えています。私のコードは次のとおりです。
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 が表示されないことです。つまり、黒い画面が表示され、長い一時停止の後、項目が完全に入力されたリストが表示されます。これはなぜですか? UI の描画、ProgressDialog の表示、パーサーが項目を取得して段階的にリストに追加し、ProgressDialog が閉じないのはなぜですか?doInBackground()