概述

在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. matplotlib可视化最全指南

    1. 折线图:plt.plot 设置数据:plt.plot(x,y),单列数据传入默认y轴,此时x轴数据默认从0逐渐对应递增 设置颜色:plt.plot(x,y,color/c=" &quo ...

  2. C# 中获取一个目录下的目录与文件

    //获得目录下所有文件和子目录使用DirectoryInfo类的GetFileSystemInfos()方法. //获得目录下所有目录 string[] dirs = Directory.GetDir ...

  3. let和const总结(ES6)

    文章目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块 ...

  4. Docker常用命令-全

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接: https://app.yinxiang.com/shard/s17/nl/19391737/9f6bf39e- ...

  5. Csharp: TreeList Drag and Drop

    /// <summary> /// https://www.codeproject.com/articles/3225/treelistview /// https://www.codep ...

  6. JVM调优之服务内存超过阈值报警

    今早收到一条短信,具体报警信息如下: [UMP JVM监控内存报警]应用名:发券worker(jdos_couponwkr);KEY[coupon.send.worker.jvm],主机名:[host ...

  7. .NET Core 使用HMAC算法

    一. HMAC 简介 通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口令是否正确,我们用保存在数据库中的password_md5对比计算md5(password ...

  8. Redis 数据淘汰机制

    为了更好的利用内存,使Redis存储的都是缓存的热点数据,Redis设计了相应的内存淘汰机制(也叫做缓存淘汰机制) 通过maxmemory 配置项来设置允许用户使用的最大内存大小,当内存数据集大小达到 ...

  9. Spring(4)AOP

    Spring(4)AOP 1.AOP概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  10. git配置:本地仓库提交到远程仓库

    前提:1.已安装git 一:创建公钥,一台机子匹配一个公钥 桌面右键选择 Git Bash Here 打开命令行输入:ssh-keygen -t rsa -C "xxx@xxx.com&qu ...