Android AsyncTask使用说明

 示例代码

我们先运行下如下代码,看下打印的log,然后再做说明

private void doTask() {
    new AsyncTask<String, Integer, Boolean>() {

        @Override
        protected void onPreExecute() {
            Log.d("MyAsyncTask", "onPreExecute:任务开始,线程" + Thread.currentThread().getName());
        }

        @Override
        protected Boolean doInBackground(String... params) {
            for (int i = 1; i <= 5; i++) {
                String name = params[0];
                try {
                    Log.d("MyAsyncTask", "doInBackground:" + name + "执行任务步骤" + i + ",线程" + Thread.currentThread().getName());
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    return false;
                }
                publishProgress(i);
            }
            return true;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            Log.d("MyAsyncTask", "onProgressUpdate:" + "完成任务步骤" + values[0] + ",线程" + Thread.currentThread().getName());
        }

        @Override
        protected void onPostExecute(Boolean result) {
            if (result) {
                Log.d("MyAsyncTask", "onPreExecute:任务完成,线程" + Thread.currentThread().getName());
            } else {
                Log.d("MyAsyncTask", "onPreExecute:任务失败,线程" + Thread.currentThread().getName());
            }
        }
    }.execute("野猿新一");
}

以上代码执行了一个后台任务,打印日志如下

2019-12-27 09:47:20.827 4138-4138/com.him.hisapp D/MyAsyncTask: onPreExecute:任务开始,线程main
2019-12-27 09:47:20.829 4138-4226/com.him.hisapp D/MyAsyncTask: doInBackground:野猿新一执行任务步骤1,线程AsyncTask #1
2019-12-27 09:47:21.829 4138-4226/com.him.hisapp D/MyAsyncTask: doInBackground:野猿新一执行任务步骤2,线程AsyncTask #1
2019-12-27 09:47:21.829 4138-4138/com.him.hisapp D/MyAsyncTask: onProgressUpdate:完成任务步骤1,线程main
2019-12-27 09:47:22.830 4138-4138/com.him.hisapp D/MyAsyncTask: onProgressUpdate:完成任务步骤2,线程main
2019-12-27 09:47:22.830 4138-4226/com.him.hisapp D/MyAsyncTask: doInBackground:野猿新一执行任务步骤3,线程AsyncTask #1
2019-12-27 09:47:23.830 4138-4138/com.him.hisapp D/MyAsyncTask: onProgressUpdate:完成任务步骤3,线程main
2019-12-27 09:47:23.831 4138-4226/com.him.hisapp D/MyAsyncTask: doInBackground:野猿新一执行任务步骤4,线程AsyncTask #1
2019-12-27 09:47:24.831 4138-4138/com.him.hisapp D/MyAsyncTask: onProgressUpdate:完成任务步骤4,线程main
2019-12-27 09:47:24.832 4138-4226/com.him.hisapp D/MyAsyncTask: doInBackground:野猿新一执行任务步骤5,线程AsyncTask #1
2019-12-27 09:47:25.832 4138-4138/com.him.hisapp D/MyAsyncTask: onProgressUpdate:完成任务步骤5,线程main
2019-12-27 09:47:25.833 4138-4138/com.him.hisapp D/MyAsyncTask: onPreExecute:任务完成,线程main

说明

AsyncTask<Params, Progress, Result>类中有三个泛型

  • Params:execute()方法传入的参数类型,在doInBackground()方法的参数中接收,可以传递多个值
  • Progress:publishProgress()方法的参数类型,在onProgressUpdate()方法中接收,可以传递多个值
  • Result:doInBackground()方法的返回类型,在onPostExecute()方法中接收

主要方法介绍:

  • onPreExecute():任务开始前执行,运行在主线程
  • doInBackground():耗时后台任务在此方法中执行,运行在子线程
  • onProgressUpdate():任务执行过程可以在doInBackground()方法内通过调用publishProgress()方法通知执行进度,onProgressUpdate()方法会接收到该进度,运行在主线程
  • onPostExecute():任务执行完毕会调用该方法,运行在主线程
发布了287 篇原创文章 · 获赞 44 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/mqdxiaoxiao/article/details/103726891