概述

在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. poj 1321 棋盘问题 (回溯法)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 69951   Accepted: 33143 Descriptio ...

  2. 服务器上无法调用Office组件的解决方法(HRESULT:0X800A03EC异常)

    HRESULT:0X800A03EC的异常,经过多番查找,终于找到了解决方法,在 Windows 2008 中, 如果以 SYSTEM 用户跑, 系统会去寻找 SYSTEM 这个用户的 Profile ...

  3. 《Java练习题》习题集四

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html Java总结:https://www.cnblogs.com/jssj/p/11146205.ht ...

  4. 《Java基础知识》Java正则表达式

    正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其实就是一个简单的正则表达式,例如  ...

  5. 基于C#WPF框架——动画

    WPF提供了一个更高级的模型,通过该模型可以只关注动画的定义,而不必考虑它们的渲染方式.这个模型基于依赖项属性基础架构.本质上,WPF动画只不过是在一段时间间隔内修染方式.这个模型基于依赖项属性基础架 ...

  6. 我的第一次面试 —— 腾讯 AI安全 一面总结

    前言 在校两年半,没经历过面试的毒打,第一次面试给了腾讯,周二晚上学长帮推的简历周三下午就打电话来问周四晚上有没有空面试.那天下午还在赶着数据库的实验报告,脑子有点转不过来就说了有空,然后仔细一看好像 ...

  7. 约数之和(POJ1845 Sumdiv)

    最近应老延的要求再刷<算法进阶指南>(不得不说这本书不错)...这道题花费了较长时间~(当然也因为我太弱了)所以就写个比较易懂的题解啦~ 原题链接:POJ1845 翻译版题目(其实是AcW ...

  8. Android Studio中的AndroidManifest.xml文件分析

    一.关于AndroidManifest.xml AndroidManifest.xml清单文件是每个Android程序中必须的文件,它是整个Android程序的全局描述文件,除了能声明程序中的Acti ...

  9. 原创 Hive count 多个度量指标,带有 distinct

    Hive  count 多个度量指标,带有  distinct ,注意点!!! 比如  select  organid, ppi, count(id1) as num1, count(distinct ...

  10. CURL命令学习一

    每天学习一点点.... 直接获取页面数据: curl http://www.xxx.com/[可以指定具体的路径获取某个文件] 用户名(密码): curl -u username http://www ...