긴 작업을 실행하고 값을 반환하는 응용 프로그램이 있습니다. 작업이 실행되는 동안 ProgressDialog
에 진행 상태가 표시됩니다. 작업이 완료되면 결과를 TextView
에 표시하고 싶습니다. FutureTask에서 작업을 실행합니다.
결과를 얻으려고 시도하면 FutureTask의 .get()
메서드가 UI 스레드를 차단하고 ProgressDialog
(결과가 제대로 표시되지 않음)이 표시되지 않습니다.ProgressDialog 이후에 긴 작업 결과 표시
작업에 대한 나의 코드 (풀 ExecutorService입니다입니다) :
final FutureTask<String> future = new FutureTask<String>(new Callable<String>() {
@Override
public String call() {
return myLongTask();
}
});
pool.execute(future);
그리고 나중에 내가 Handler
으로 ProgressDialog
을 업데이트 이는 Runnable
에서 updateProgressBar()
전화 : 내가지고있어 이제
Runnable pb = new Runnable() {
public void run() {
myUpdateProgressBar();
}
};
pool.execute(pb);
그 결과는 UI 스레드를 차단하여 ProgressDialog
이 표시되지 않도록합니다.
는, 예외가 발생합니다 : 뷰를 생성
만 원래의 스레드 계층 구조가 해당 뷰를 만질 수 있습니다.
어떤 아이디어로이 문제를 해결할 수 있습니까? (나는 AsyncTasks에 대해 들어 본 적이 있지만 나는 propertly을 사용하는 방법을 알아낼 수 없습니다.) 당신은 당신이 필요로하는 것이 올바른
AsyncTask (및 몇 가지 예)에 대한 내용을 읽은 후에 감사합니다. –