2013-07-27 58 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...)

這種方法可以從doInBackground(參數...)被調用來發布UI線程上 更新,而後臺計算是仍然運行 。每次對此方法的調用都將在UI線程上觸發執行 onProgressUpdate(Progress ...)。 onProgressUpdate(Progress ...)將被調用,如果任務已被取消 。

@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的目標是模擬一個長線程(下載數據,解析一個巨大的文件)並向用戶顯示進度。睡眠並不意味着在生產代碼上! –