1.为什么要异步任务

  • Android单线程模式
  • 耗时操作放在非主线程(UI线程)中执行

  我们都知道Android是单线程模式,只有主线程才能对UI操作,简称UI线程。当然这样的好处是:保证UI的稳定性、准确性,避免多线程同时对UI的操作,导致UI的混乱
  但同时Android是一个多线程的操作系统,不可能把全部的事情放在主线程。如果任务堵塞,当时间过长,会抛出ANR(Application Not Responding)错误。

2.AsyncTask为何而生

  • 子线程中更新UI
  • 封装、简化异步操作

3.构建AsyncTask子类的参数
  AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数:

  • Params : 启动任务时输入参数的类型。
  • Progress : 后台任务执行中返回进度值的类型
  • Result : 后台执行任务完成后返回结果的类型

4.构建AsyncTask子类的回调方法

  • doInBackground : 必须重写,异步执行后台程序将要完成的任务。
  • onPreExecute : 执行后台耗时操作前被调用,通常用户完成一些初始化操作。
  • onPostExecute : 当doInBackground() 完成后,系统自动调用onPostExecute()方法,并将doInBackground方法返回的值传给该方法
  • onProgressUpdate : 在doInBackground() 方法调用publishProgress() 方法更新任务的执行进度后,就会触发该方法

现在我们来写一个测试类:

import android.os.AsyncTask;
import android.util.Log; public class AsyncTaskTest extends AsyncTask<Void, Void, Void>{ @Override
protected Void doInBackground(Void... params) { Log.i("Task", "doInbackgroun");
return null;
} @Override
protected void onPostExecute(Void result) { Log.i("Task", "onPostExecute");
super.onPostExecute(result);
} @Override
protected void onPreExecute() { Log.i("Task", "onPreExecute");
super.onPreExecute();
} @Override
protected void onProgressUpdate(Void... values) { Log.i("Task", "onProgressUpdate");
super.onProgressUpdate(values);
}
}

在MainActivity中引用:

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AsyncTaskTest task = new AsyncTaskTest();
task.execute();
}

当我们运行在模拟器上时:

根据上面的第四条所写,我们在doInBackground中调用publshProgress方法,运行后发现多了一个onProgressUpdate

protected Void doInBackground(Void... params) {

        Log.i("Task", "doInbackgroun");
publishProgress(params);
return null;
}

谢谢大家的关注。I love you not for who you are, but for who I am before you.

Android --AsyncTask异步任务(一)的更多相关文章

  1. android AsyncTask异步下载并更新进度条

    AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...

  2. Android AsyncTask异步加载WebAPI

    之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncT ...

  3. Android AsyncTask异步任务(二)

    之前我们讲过了AsyncTask 的生命周期(onPreExecute-->doInBackground-->onProgressUpdate-->onPostExecute),今天 ...

  4. Android AsyncTask 异步任务操作

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. android AsyncTask异步任务(笔记)

    AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...

  6. Android线程管理之AsyncTask异步任务

    前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...

  7. Android多线程分析之五:使用AsyncTask异步下载图像

    Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...

  8. Android 多线程----AsyncTask异步任务详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  9. Android 消息异步处理之AsyncTask

    Android提供了异步处理消息的方式大致有两种,第一种是handler+Thread,之前已经对于这种方式做过分析,第二种就是AsyncTask,这是Android1.5提供的一种轻量级的工具类,其 ...

随机推荐

  1. 大数据运算模型 MapReduce 原理

    大数据运算模型 MapReduce 原理 2016-01-24 杜亦舒 MapReduce 是一个大数据集合的并行运算模型,由google提出,现在流行的hadoop中也使用了MapReduce作为计 ...

  2. 【LeetCode】Hamming Distance

    问题网址 https://leetcode.com/problems/hamming-distance/ 就是一个异或后,求1的位数的问题. 看到问题之后,首先困扰是: int能不能求异或?是不是要转 ...

  3. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

  4. Ajax回调函数返回的中文字符串乱码问题

    通过ajax提交请求,返回的response所带的中文字符串一直显示为乱码,写了如下代码也无效: response.setCharacterEncoding("UTF-8"); r ...

  5. 使用SecureCRT远程链接Ubuntu出现 Change of username or service not allowed的问题

    RT:    首先是确认ubuntu上有运行 sshd服务的 但是用SecureCRT链接时报错,默认用户名是root: 打开ssh_config检查下是否禁止直接用root登陆 这句 改成yes o ...

  6. Atom使用到的插件

    atom-beautify atom-css-class-checker atom-css-comb atom-css-unit-converter atom-csscomb atom-csslint ...

  7. 【EasyUI】combotree和combobox模糊查询

    这里说的模糊查询指在输入框输入,然后自动在下拉框中显示匹配结果,类似Google搜索提示 EasyUI库已经实现了combobox的查询过滤功能,但只能从头匹配,原因是EasyUI库的代码限制: fi ...

  8. python类型转换、数值操作

    类型转换 代码  1 函数                      描述  2 int(x [,base ])         将x转换为一个整数  3 long(x [,base ])       ...

  9. WebStorm调试node.js

    直接上图:

  10. Shell练习

    1   在终端下运行程序,首先清屏,然后提示:“Input a file or directory name, please!”.从键盘输入一个字符串(如:xxx),如果该字符串是目录,则显示:“xx ...