Android技能之-AsyncTask

AsyncTask,是一個Android封裝好的輕量級異步類,是Android應用在多線程使用上常用的方法之一,可降低異步通信的開發難度

如何使用

    public class UserLoginTask extends AsyncTask<String, Integer, String> {
        UserLoginTask(String loginId, String password) {
            ALog.vTag(TAG, "loginId:%s,password:%s", loginId, password);
        }

        /**
         * 開始執行後臺線程時調用,當前處於UI線程
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ALog.vTag(TAG, "onPreExecute ...");
        }

        /**
         * 開始執行後臺線程任務,AsyncTask子線程
         */
        @Override
        protected String doInBackground(String... params) {
            ALog.vTag(TAG, "params:%s", Arrays.toString(params));
            // TODO: 執行耗時的業務
            return "doInBackground返回的數據";
        }

        /**
         * 刷新線程,調用publishProgress(i)時回調,一般用於刷新進度,比如doInBackground中調用publishProgress進行進度刷新,UI線程
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            ALog.vTag(TAG, "values:%s", Arrays.toString(values));
        }

        /**
         * 後臺線程結束時調用,當前處於UI線程
         */
        @Override
        protected void onPostExecute(String success) {
            ALog.vTag(TAG, "success:%s", success);
        }

        @Override
        protected void onCancelled() {
            ALog.vTag(TAG, "onCancelled ....");
        }
    }

實例並啓動後臺線程

mAuthTask = new UserLoginTask(loginId, password);
mAuthTask.execute("我是URL","我是param1");

生命週期說明

  • onPreExecute() 後臺線程通知UI線程,後臺線程開始執行
  • doInBackground(Params... params) 後臺線程,處理耗時任務,其中參數params爲execute(Params… params)所攜帶的參數數組內容
  • onPostExecute(Result result)後臺線程處理完業務邏輯後反饋執行結果給UI線程,其中參數result爲doInBackground返回的數據內容
  • onProgressUpdate(Progress... values)後臺線程實時反饋執行過程給UI線程,一般用在UI的進度刷新,其中參數爲在doInBackground回調中調用publishProgress(Progress… values)方法所帶入的參數values
  • onCancelled()後臺進程執行完成或者執行過程中被主動執行cancel(boolean mayInterruptIfRunning)時調用,此時onPostExecute就不被回調
    其中,這些接口上的參數,取決於實例AsyncTask<Params, Progress, Result>時所定義的類型,如上面使用例子定義的是AsyncTask<String, Integer, String>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章