2015-12-28 48 views
2

我無法理解Android中Asynctask參數的使用。Android AsyncTask參數

Android開發者文檔解釋了它,如下所示:

AsyncTask must be subclassed to be used. 
The subclass will override at least one method (doInBackground(Params...)), 
    and most often will override a second one (onPostExecute(Result).) 

這裏是子類的實例:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress[0]); 
    } 

    protected void onPostExecute(Long result) { 
     showDialog("Downloaded " + result + " bytes"); 
    } 
} 

一旦建立,任務是非常簡單的執行:

new DownloadFilesTask().execute(url1, url2, url3); 

對於我的AsyncTask的擴展,我不需要傳入任何參數,但我需要覆蓋doInBackground()onProgressUpdate()onPostExecute()。爲什麼我必須將Void,Void,Void插入AsyncTask<>

這些參數做什麼?

+0

這可能對那些遇到這個問題的人有幫助 - [什麼參數傳入AsyncTask ?](http:// stackoverflow。COM /問題/ 6053602 /什麼論點,是繞過成 - asynctaskarg1-ARG2,ARG3) – Sufian

回答

1

從它說,使用文檔Void只是將該類型標記爲未使用。您不必在AsyncTask中輸入類型。

由異步任務中使用的三種類型的有以下幾種:

  1. PARAMS,發送到在執行時任務的參數的類型。
  2. 進度,後臺計算期間發佈的進度單位的類型。
  3. 結果,後臺計算結果的類型。

並非所有類型總是由異步任務使用。爲了紀念一個類型 爲未使用時,只需使用void類型:

private class MyTask extends AsyncTask<Void, Void, Void> { ... } 
1

嗯異步任務的參數是簡單的,

第一個參數:對象或單個對象,其所需的後臺進程的數組。

二PARAM:你要進入到onProgressUpdate

三的參數對象類型:doInBackground

的返回類型

例如: -

private class ImageDownloader extends AsyncTask<Void, Void, Void> {//todo} 

ImageDownloader downloader = new ImageDownloader(); 
downloader.execute(); 
1

您插入無效無效無效的,如果你沒有必要的參數。例如,當異步任務完成並且在onPostExecute中,您只想更新視圖,並且它不依賴於結果doInBackground,則可以將Void作爲第三個參數。

我認爲最好的做法是使用參數,而不是在異步任務或實例變量中保存變量,如果異步任務是私有內部類。