我有一个应用程序,它运行一个长任务并返回一个值。任务正在运行时,ProgressDialog
会显示进度。任务完成后,我想在TextView
中显示结果。我在FutureTask中运行任务。
我的问题是,如果我尝试获得结果,FutureTask的.get()
方法会阻止UI线程,并且我看不到ProgressDialog
(TextView
显示结果的属性)。ProgressDialog后显示长任务的结果
我的任务代码(池的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()
如果我尝试把结果updateProgressBar()方法中(通过将未来作为一个参数)的ProgressDialog驳回后,一个异常被抛出:
只有创建视图原来的线程层级可以触及其观点。
任何想法如何解决这个问题? (我听说过AsyncTasks但我无法弄清楚如何propertly使用它们。)
阅读了关于AsyncTask(以及一些例子)后,我得到了它的工作,谢谢。 – 2011-02-05 14:39:12