我有一個應用程序,它運行一個長任務並返回一個值。任務正在運行時,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