gpt4 book ai didi

android - 在 ProgressDialog 之后显示长任务的结果

转载 作者:太空狗 更新时间:2023-10-29 13:41:45 24 4
gpt4 key购买 nike


我有一个运行长任务并返回值的应用程序。任务运行时,ProgressDialog 会显示进度。任务完成后,我想在 TextView 中显示结果。我在 FutureTask 中运行任务。
我的问题是,如果我尝试获取结果,FutureTask 的 .get() 方法会阻塞 UI 线程,而且我看不到 ProgressDialog(TextView 正确显示结果)。

我的任务代码(池是 ExecutorService):

final FutureTask<String> future = new FutureTask<String>(new Callable<String>() {  
@Override
public String call() {
return myLongTask();
}
});
pool.execute(future);

然后我在 Runnable 中调用 updateProgressBar(),它使用 Handler 更新 ProgressDialog:

Runnable pb = new Runnable() {  
public void run() {
myUpdateProgressBar();
}
};
pool.execute(pb);

现在我得到了结果,它阻止了 UI 线程阻止 ProgressDialog 显示:

String result = future.get()

如果我在 ProgressDialog 关闭后尝试将结果放入 updateProgressBar() 方法(通过将 future 作为参数传递),则会抛出异常:

Only the original thread that created a view hierarchy can touch its views.

有什么办法解决这个问题吗? (我听说过 AsyncTasks,但我不知道如何正确使用它们。)

最佳答案

您是正确的,您需要 AsyncTaskThread/Handler 组合才能不阻塞 UI。

这两种方法都没有那么棘手,并且有一些很好的指南可以说明如何进行。以下是我推荐的一些链接。

关于android - 在 ProgressDialog 之后显示长任务的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903180/

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