一起学Android之AsyncTask
概述
在Android开发中,为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作,Anddroid开发框架提供了一个助手类AsyncTask,它对Thread和Handler进行了封装,方便我们使用。
涉及知识点
AsyncTask提供了四个回调方法,分别在不同的时期进行调用,具体如下:
- onPreExecute() 任务执行之前的准备操作
- doInBackground(Void... params) 任务执行体
- nProgressUpdate(Integer... values) 任务执行过程中状态更新
- onPostExecute(Void aVoid) 任务执行完毕操作
AsyncTask使用步骤
- 定义AsyncTask的子类,并在子类中实现回调函数
- 声明子类对象,并调用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的更多相关文章
- android高级---->AsyncTask的源码分析
在Android中实现异步任务机制有两种方式,Handler和AsyncTask,它在子线程更新UI的例子可以参见我的博客(android基础---->子线程更新UI).今天我们通过一个小的案例 ...
- Android笔记——AsyncTask介绍
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
- Android开发学习之路-该怎么学Android(Service和Activity通信为例)
在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...
- Android—初识AsyncTask
AsyncTask是用来处理一些后台的比较耗时的任务,给用户带来良好的体验.AsyncTask扩展Thread,增强了与主线程的交互能力. 首先介绍AsyncTask中定义的以下几个方法: onPre ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- 详解Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- 55.Android之AsyncTask介绍 (转)
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
- Android 多线程----AsyncTask异步任务详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
随机推荐
- SQL- SQL查询检索阶段一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统: 二 准备前提 需要建立一张学生表,列分别是id,名称, ...
- 去掉 Idea 中注入 Mapper 警告的方法
使用 Idea 的时候,自动装配 Mybatis 的 mapper.会一直出现红色波浪线的警告.看着难受.下面提供几种方式 方式一 为 @Autowired 注解设置required = false ...
- python同步IO编程——StringIO、BytesIO和stream position
主要介绍python两个内存读写IO:StringIO和BytesIO,使得读写文件具有一致的接口 StringIO 内存中读写str.需要导入StringIO >>> from i ...
- 树上前k大的包含不重复结点的长链
一棵树,不一定是二叉树,在每个结点最多只属于一条链的情况下,处理出其中最长的前k个的长度. 最近训练赛做到两道题了,有必要总结一下. 不过我不知道是否有更专门的叫法. 借鉴了这位大佬的博客:https ...
- Retrofit-草稿
1.GSONFormat 2.动态代理 https://www.cnblogs.com/maohuidong/p/7992894.html retrofit的核心就是动态代理
- SpringBoot系列——Jackson序列化
前言 Spring Boot提供了与三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的默认库. 官网介绍: https://docs.spring.io/spr ...
- JVM常用参数详解
JVM整个堆大小=年轻代大小 + 年老代大小 + 持久代大小,在JDK1.8及之后的版本由于永久代被元空间替代,所以jdk1.8中的堆=年轻代大小 + 年老代大小.本文使用的是JDK1.8 1.堆 ...
- autojump 之 git本地安装
1.克隆autojump的repo,Terminal下执行: git clone git://github.com/joelthelion/autojump.git 然后进入c ...
- golang.org 安装脚本
#!/usr/bin/env bash cd $GOPATH; #创建 $GOPATH/src/golang.org/x 目录 mkdir -p $GOPATH/src/golang.org/x; e ...
- webpack-dev-server config.js Cannot find module
Error: Cannot find module,webpack-dev-server --config 报错找不到模块 webpack-dev-server 设置 webpack.config.j ...