같은 시간에 30 개의 스레드 (AsyncTask)가 실행되었습니다. 그들을 실행하기 전에, 나는 진행 대화 상자를 보여줄 것이다. 스레드가 실행을 마친 후 진행 표시를 닫습니다.모든 스레드를 마친 후 ProgressDialog를 닫는 방법?
모든 스레드를 완료 한 후 ProgressDialog를 해제하는 방법에 대한 제안 사항?
같은 시간에 30 개의 스레드 (AsyncTask)가 실행되었습니다. 그들을 실행하기 전에, 나는 진행 대화 상자를 보여줄 것이다. 스레드가 실행을 마친 후 진행 표시를 닫습니다.모든 스레드를 마친 후 ProgressDialog를 닫는 방법?
모든 스레드를 완료 한 후 ProgressDialog를 해제하는 방법에 대한 제안 사항?
정확히 30 개의 스레드를 사용하는 경우 변수를 30으로 초기화하고 모든 작업 완료 후 계수를 1만큼 줄이고 변수가 0인지 확인하십시오. 0이면 모든 작업이 완료되었음을 나타냅니다. 그래서 당신은 ProgressDialog를 닫을 수 있습니다.
가장 좋은 방법은 AsyncTask()
을 사용하여 작업을 실행하고 onPOstExecute()
의 대화 상자를 닫는 것입니다. 이렇게하면 작업이 완료되고 ProgressDialog가 완료됩니다. 여전히 스레드를 계속 사용하려면 스레드가 완료 될 때마다 발생하는 사용자 지정 리스너를 추가해야하며 스레드가 해고 된 횟수 카운터를 유지 관리 할 수 있습니다. 내가 당신에게 코드를 준 수, 더 나은 예는이 링크에 있습니다 : How to know if other threads have finished?
당신은 글로벌 클래스 사용할 수 있습니다 : 당신이 때문에 스레드의 동시 액세스의 "동기화"를 사용합니다
public abstract class Global{
private static int counter = 30;
private static ProgressDialog pd;
private static Activity a;
public static synchronized void updateCounter(){
counter--;
if(counter<=0){
a.runOnUiThread(new Runnable() {
@Override
public void run() {
pd.dismiss();
}
});
}
}
}
을 .
그리고 당신의 주요 활동에
는해서 ProgressDialog를 시작하고 변수를 초기화 :Global.a = this;
Global.pd = ProgressDialog.show(this, "Tittle","Message ...", true);
를 다음 스레드를 시작합니다.
각 스레드의 말에당신은 다음 Global.updateCounter();
좋은 해결책. 감사. – thalsharif
하나가 지속적으로 UI 스레드를 차단하지 않는 것이 좋습니다 카운터를 확인하기 위해 루프를 실행해야합니다 호출 할 수 있습니다. – Akhil
비동기 작업의 onPostexecute()에 쓰기 만하면 안됩니다. 그래서 그것은 단지 30 시간을 체크 할 것입니다. 즉, 모든 비동기 작업에 대해 한 번 – Ishu
도 변수가 모든 스레드간에 공유되어야한다고 생각하십니까? – thalsharif