概述

在Android开发中,为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作,Anddroid开发框架提供了一个助手类AsyncTask,它对Thread和Handler进行了封装,方便我们使用。

涉及知识点

AsyncTask提供了四个回调方法,分别在不同的时期进行调用,具体如下:

  1. onPreExecute() 任务执行之前的准备操作
  2. doInBackground(Void... params) 任务执行体
  3. nProgressUpdate(Integer... values) 任务执行过程中状态更新
  4. onPostExecute(Void aVoid) 任务执行完毕操作

AsyncTask使用步骤

  1. 定义AsyncTask的子类,并在子类中实现回调函数
  2. 声明子类对象,并调用execute()方法

示例功能图

如下图所示:

示例源代码

定义AsyncTask的子类,并在子类中实现回调函数,源码如下:

  /**
* 自定义任务类
* Params:表示任务接收参数类型
* Progress:表示进度类型
* Result:返回值类型
* Void是关键字void的占位符类
*/
class MyTask extends AsyncTask<Void,Integer,Void>{ /**
* 任务执行之前的准备工作
*/
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute: =========准备=========");
} /**
* 任务执行
* @param params
* @return
*/
@Override
protected Void doInBackground(Void... params) {
Log.i(TAG, "doInBackground: =========正在执行=========");
for(int i=0;i<100;i++){
publishProgress(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
} /**
* 任务执行状态更新
* @param values
*/
@Override
protected void onProgressUpdate(Integer... values) {
int percent=(values[0]+1);
mTextView.setText(String.valueOf(percent));
mProgressBar.setProgress(percent);
} /**
* 任务执行结束触发事件
* @param aVoid
*/
@Override
protected void onPostExecute(Void aVoid) {
Log.i(TAG, "onPostExecute: =========执行完毕=========");
Toast.makeText(MainActivity.this,"任务执行完毕",Toast.LENGTH_SHORT).show();
}
}

声明子类对象,并调用execute()方法,源码如下:

     /**
* 点击事件
* @param v
*/
public void bn_task_click(View v){
//通过调用execute()方法,执行任务
Log.i(TAG, "bn_task_click: =========开始=========");
new MyTask().execute();
}

调用日志如下所示:

 07-21 14:00:30.499 18439-18439/com.hex.demotask I/DemoTask: bn_task_click: =========开始=========
07-21 14:00:30.501 18439-18439/com.hex.demotask I/DemoTask: onPreExecute: =========准备=========
07-21 14:00:30.502 18439-18675/com.hex.demotask I/DemoTask: doInBackground: =========正在执行=========
07-21 14:01:20.674 18439-18439/com.hex.demotask I/DemoTask: onPostExecute: =========执行完毕=========

备注

一日一钱,千日千钱,绳锯木断,水滴石穿。

一起学Android之AsyncTask的更多相关文章

  1. android高级---->AsyncTask的源码分析

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask,它在子线程更新UI的例子可以参见我的博客(android基础---->子线程更新UI).今天我们通过一个小的案例 ...

  2. Android笔记——AsyncTask介绍

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

  3. Android开发学习之路-该怎么学Android(Service和Activity通信为例)

    在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...

  4. Android—初识AsyncTask

    AsyncTask是用来处理一些后台的比较耗时的任务,给用户带来良好的体验.AsyncTask扩展Thread,增强了与主线程的交互能力. 首先介绍AsyncTask中定义的以下几个方法: onPre ...

  5. 菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  6. 详解Android中AsyncTask的使用

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  7. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  8. 55.Android之AsyncTask介绍 (转)

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

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

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

随机推荐

  1. 图文结合深入理解JS中的this值

    文章目录 Js 中奇妙的this值 1. 初探this 2. this指向总结 2.1 普通函数调用 2.2 对象的方法调用 2.3 构造函数调用 2.4 利用call,apply,bind方法调用函 ...

  2. 字符串的扩展(ES6)

    文章目录 字符串的扩展 1. 字符的Unicode表示法 2. codePointAt() 3. String.fromCodePoint() 4. 字符串的遍历器接口 5. at()(提案) 6. ...

  3. Hadoop_MapReduce_03

    1. MapReduce入门 1.1 MapReduce的思想 MapReduce的思想核心是"分而治之" , 适用于大量的复杂的任务处理场景 (大规模数据处理场景) . Map负 ...

  4. Hadoop_HDFS_02

    1. HDFS入门 1.1 HDFS基本概念 HDFS是Hadoop Distribute File System的简称, 意为: Hadoop分布式文件系统. 是Hadoop三大核心组件之一, 作为 ...

  5. MariaDB主从复制和读写分离

    一.基础环境 二.配置MariaDB服务 1.安装MariaDB # yum install -y mariadb mariadb-server # systemctl start mariadb # ...

  6. js 从两道面试题加深理解闭包与箭头函数中的this

     壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...

  7. Java8新特性之接口defualt,static方法

    简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继 ...

  8. 如何利用随机数产生验证码(java基础知识)

    以前我们通用的验证码都是五个不同的大小写字母,那么今天我就带大家学习一下利用Java基础怎么生成验证码.首先我们应该有一个清晰的思路:首先定义一个固定长度的数组用来存储需要生成的字母:其次生成随机数, ...

  9. LINE 项目总结

    前段时间做了一个“国外的公众号”,为什么说是国外的公众号呢,因为他和微信的公众号有很多共通之处.当然了也有很多不同的地方,第一个要说的就是,我在打印信息的时候,使用的alert()弹窗,但是后台才发现 ...

  10. vim 入门笔记

    前言 本文的初衷 从知道 vim 开始我就有心学习并尝试过几次,每次都是暂时的心血来潮,最终全部不了了之,就连最基本的 vimtutor 我都是学个两三节就半途而废,所以这次干脆写篇文章,利用几次学习 ...