android asynctask用法 - 什麼參數傳入AsyncTask<arg1,arg2,arg3>?




arguments android-asynctask (5)

  • 簡而言之,AsyncTask中有3個參數

    1. DoInBackground(String ... params)中輸入使用的參數

    2. 在OnProgressUpdate(String ... status)中使用的進度顯示狀態參數

    3. OnPostExcute(String ... result)中使用結果的參數

    注意: - [參數類型可能因您的要求而異]

我不明白我應該把什麼放在這裡,以及這些爭論最終在哪裡? 我究竟應該放什麼,它究竟會走到哪裡? 我是否需要包含全部3個或可以包含1,2,20?


Google的Android文檔說明:

異步任務由3個泛型類型定義,稱為Params,Progress和Result,以及4個步驟,分別稱為onPreExecute,doInBackground,onProgressUpdate和onPostExecute。

AsyncTask的泛型類型:

異步任務使用的三種類型如下:

Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.

並非所有類型總是由異步任務使用。 要將某個類型標記為未使用,只需使用類型Void:

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

您可以進一步參考: http://developer.android.com/reference/android/os/AsyncTask.html : http://developer.android.com/reference/android/os/AsyncTask.html

或者你可以通過引用Sankar-Ganesh的博客來明確AsyncTask的作用

那麼典型的AsyncTask類的結構如下所示:

private class MyTask extends AsyncTask<X, Y, Z>

    protected void onPreExecute(){

    }

此方法在啟動新線程之前執行。 沒有輸入/輸出值,所以只需初始化變量或任何你認為你需要做的事情。

    protected Z doInBackground(X...x){

    }

AsyncTask類中最重要的方法。 你必須在這裡把所有你想做的事情放在後台,在與主要的線程不同的線程中。 在這裡,我們有一個類型為“X”的對像數組作為輸入值(您在頭文件中看到了什麼?我們有“...擴展AsyncTask”這些是輸入參數的類型)並返回類型的對象“Z”。

   protected void onProgressUpdate(Y y){

   }

使用publishProgress(y)方法調用此方法,通常在您想要在主屏幕中顯示任何進度或信息時使用此方法,例如顯示您在後台執行的操作進度的進度條。

  protected void onPostExecute(Z z){

  }

在後台操作完成後調用此方法。 作為輸入參數,您將收到doInBackground方法的輸出參數。

那麼X,Y和Z類型呢?

正如你可以從上述結構中推斷出的那樣:

 X – The type of the input variables value you want to set to the background process. This can be an array of objects.

 Y – The type of the objects you are going to enter in the onProgressUpdate method.

 Z – The type of the result from the operations you have done in the background process.

我們如何從外部課堂調用這個任務? 只需以下兩行:

MyTask myTask = new MyTask();

myTask.execute(x);

其中x是類型X的輸入參數。

一旦我們的任務運行,我們就可以從“外部”中找到它的狀態。 使用“getStatus()”方法。

 myTask.getStatus();

我們可以收到以下狀態:

RUNNING - 表示任務正在運行。

PENDING - 表示該任務尚未執行。

完成 - 表示onPostExecute(Z)已完成。

關於使用AsyncTask的提示

  1. 不要手動調用PreExecute,doInBackground和onPostExecute方法。 這是由系統自動完成的。

  2. 您不能在另一個AsyncTask或Thread內調用AsyncTask。 方法執行的調用必須在UI線程中完成。

  3. onPostExecute方法在UI線程中執行(在這裡你可以調用另一個AsyncTask!)。

  4. 任務的輸入參數可以是一個Object數組,這樣你可以放置任何你想要的對象和類型。


我對派對太遲了,但認為這可能有助於某人。


請參閱以下鏈接:

  1. http://developer.android.com/reference/android/os/AsyncTask.html
  2. http://labs.makemachine.net/2010/05/android-asynctask-example/

如果您只想傳遞1個參數,則不能傳遞超過三個參數,然後對其他兩個參數使用void。

1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 


2. protected class InitTask extends AsyncTask<Context, Integer, Integer>

異步任務由在後台線程上運行的計算定義,並且其結果在UI線程上發布。 異步任務由3個泛型類型定義,稱為Params,Progress和Result,以及4個步驟,分別稱為onPreExecute,doInBackground,onProgressUpdate和onPostExecute。

KPBird


從邏輯上講,我們實際上是在談論同樣的事情。 但我認為一個簡單的比喻將有助於解決這個困境。

如果隱喻可以被稱為各種連接點,我們可以將它們等同於插入牆上的點。 在這種情況下,我們可以考慮如下參數和參數;

參數是可能採用各種不同形狀的插入點的插座。 但只有某些類型的插頭適合它們。
參數將是插入插入點/插座以激活某些設備的實際插頭。





android arguments android-asynctask