2013-07-27 3 views
2

클래스에 AsyncTask이 있습니다. 실행되는 동안 진행 상황을 표시하고 싶습니다. 하지만 로그를 인쇄하지 않습니다.Android AsyncTask의 onProgressUpdate가 작동하지 않습니다.

private void registerBackground() { 
    new AsyncTask<Void, Integer, String>() { 

     @Override 
     protected String doInBackground(Void... params) { 
      Log.v("TAGGG", "IN doInBackground"); 
      msg = "Error: "; 

      return msg; 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      super.onProgressUpdate(progress); 
      Log.v("TAGGG", "Progress: " + progress[0] + "%"); 
     } 

     @Override 
     protected void onPostExecute(String msg) 
     { 
      Log.v("TAGGG", msg); 
     } 
    }.execute(); 
} 

답변

7

당신은 publishProgress() 메소드를 사용해야합니다 : http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress(Progress...)

배경 계산 인 반면,이 메소드는 UI 스레드에서 업데이트를 게시 할 doInBackground (에 Params ...)에서 호출 할 수 있습니다 여전히 이 (가) 실행 중입니다. 이 메소드를 호출 할 때마다 UI 스레드에서 onProgressUpdate (진행 중 ...) 실행이 트리거됩니다. 작업이 취소 된 경우 onProgressUpdate (진행 ...)가 호출됩니다.

@Override 
    protected String doInBackground(Void... params) { 
     Log.v("TAGGG", "IN doInBackground"); 
     msg = "Error: "; 
     int i = 0; 
     while (i <= 50) { 
      try { 
       Thread.sleep(50); 
       publishProgress(i); 
       i++; 
      } 
      catch (Exception e) { 
       Log.i(TAGGG, e.getMessage()); 
      } 
     } 
     return msg; 
    } 
+1

왜 'while'코드입니까? 왜 '잠'까요? 느리게 만들지 않겠습니까? –

+1

@ micro.pravi Asynctask의 목적은 긴 스레드 (데이터 다운로드, 거대한 파일 구문 분석)를 진행하고 사용자에게 진행 상황을 표시하는 것입니다. 수면은 프로덕션 코드에있는 것이 아닙니다! –

관련 문제