2012-01-11 6 views
2

내가 만드는 중입니다. 간단한 진행 막대가 10 초 동안로드됩니다. 그래서 내가 원하는 것은이 같은 루프 - 임의의 루프없이 진행 상황을 처리 할 수 ​​Android : 업데이트 UI가있는 루프의 시간 지연

for(int i = 1; i <= 100; i++) { 
        progressDialog.setProgress(i); 
        //100ms delay 
       } 

감사

+1

doc : AsyncTask ... UI 스레드에서 작업을 차단하지 마십시오 !!! – Selvin

+0

@ 셀빈,하지만 어쩌면 그것은 AsyncTask 아니에요 –

+0

난 그냥 그가 ** 사용해야 ** 지적 : – Selvin

답변

1

다음 코드가 도움이 될 수 있습니다.

public void startProgress(View view) { 
    // Do something long 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 0; i <= 10; i++) { 
       final int value = i; 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         progressDialog.setProgress(value); 
        } 
       }); 
      } 
     } 
    }; 
    new Thread(runnable).start(); 
} 
0

그것은 AsyncTask를를 사용하는 것이 좋습니다.

3

당신은 0으로 루프 인덱스를 초기화 할 목적 preExecute에서

() 메서드에 대한 비동기 작업을 사용할 수 있습니다;

10 초 동안 배경 공정 수면 스레드에서

다음 매개 변수를 얻을 진행 postExecute 업데이트 진행 표시 줄에서 진행에게

을 보내 sendUpdate 메서드를 호출합니다.