gpt4 book ai didi

在后台线程完成之前,Android ASync 任务 ProgressDialog 不会显示

转载 作者:IT老高 更新时间:2023-10-28 23:40:59 28 4
gpt4 key购买 nike

我有一个 Android Activity ,它从 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 中每个项目的数组列表。我面临的问题是,在启动 Activity 时,我在 onPreExecute() 中创建的 ProgressDialog 直到 after doInBackground() 方法已完成。即我得到一个黑屏,长时间的停顿,然后是一个包含项目的完全填充列表。为什么会发生这种情况?为什么不绘制 UI、显示 ProgressDialog、解析器获取项目并逐步将它们添加到列表中,然后 ProgressDialog 关闭?

最佳答案

我怀疑在您执行任务后有什么东西阻塞了您的 UI 线程。例如,我见过人们这样做:

MyTask myTask = new MyTask();
TaskParams params = new TaskParams();
myTask.execute(params);
myTask.get(5000, TimeUnit.MILLISECONDS);

此处的 get 调用将阻塞 UI 线程(大概是在此处分离任务...),这将阻止任务的 onPreExecute() 方法中的任何 UI 相关内容,直到任务实际完成。哎呀!希望这可以帮助。

关于在后台线程完成之前,Android ASync 任务 ProgressDialog 不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com