AsyncTask耗時工作

使用方法

通常寫成內部類別,方便與UI進行互動,形如AsyncTask<傳入值型態, 進度值型態, 回傳值型態>,傳入的型態如String, Integer, Float, Boolean,如果不需要傳入參數的話,寫Void(大寫V)。

定義完型態,接著覆寫doInBackground()

class TestTask extends AsyncTask<Void, Void, Void>
{    
    TestTask(Context context, JSONObject result)
    {
        //也可以這樣傳入參數
        ...
    }
    @Override
    protexted Boolean doInBackground(Void... params)
    {
        //do something
        return null;
    }
}

執行的時候建立出testTask物件,執行execute()就行了。execute()裡面可以填入需要的參數。執行execute()後相當於執行了doInBackground()。

TestTask testTask = new TestTask();
testTask.execute();

與UI Thread的互動

有三個方法可以與UI Thread互動,包括onPreExecute(之前)、onProgressUpdate(過程)、onPostExecute(之後)

1.背景工作之前做的事放在onPreExecute()

2.背景工作執行過程中更新狀態的邏輯放在onProgressUpdate(),在doInBackground()可以呼叫publishProgress()方法自動執行onProgressUpdate()。

3.執行完背景工作後,會執行onPostExecute()

除了doInBackground()之外,三個方法裡面都能夠與UI Thread互動。

Last updated