我有一个 Android 活动,它从 URL 中获取 RSS 提要,并使用 SAX 解析器将 XML 中的每个项目粘贴到一个数组中。这一切都很好,但正如预期的那样,需要一些时间,所以我想使用 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 中每个项目的数组列表。我面临的问题是,在启动活动时,我创建的 ProgressDialog直到onPreExecute()
方法完成后才会显示。doInBackground()
即我得到一个黑屏,长时间的停顿,然后是一个完全填充的列表,其中包含项目。为什么会发生这种情况?为什么不绘制 UI、显示 ProgressDialog、解析器获取项目并逐步将它们添加到列表中,然后 ProgressDialog 消失?