一、AsyncTask的定义

AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程,并在主线程更新UI。

从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便执行后台任务以及在主线程中访问UI。

AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数

public abstract class AsyncTask<Params,Progress,Result>

AsyncTask三个泛型参数:

》Params,任务的输入参数类型;

》Progress,任务执行进度的参数类型。

》Result,任务返回结果的参数类型。

如果AsyncTask确实不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。

二、AsyncTask的4个核心方法:

1、onPreExecute()

在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。

2、doInBackground(Params...)

在后台线程池中执行,可能会花费很长时间;可以通过publishProgress方法来更行任务的进度,publishProgress方法会调用onProgressUpdate方法;此方法还需要返回结果给onPostExecute方法。

3、onProgressUpdate(Progress...)

在UI线程上执行。这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。

4、onPostExecute(Result)

在UI线程上执行。后台进程的结果被传递到这一步作为参数。

常用的写法如下:

class MyTask extends AsyncTask<String, Integer, String> {

    @Override
protected String doInBackground(String... params) {
//执行异步任务
int n = 10;
//调用publishProgress公布进度,最后onProgressUpdate方法将被执行
publishProgress(n);
Thread.sleep(500);    
return null;
} @Override
protected void onPostExecute(String result) {
//更新UI,显示结果
} @Override
protected void onProgressUpdate(Integer... values) {
//更新进度信息
}

任务调用的代码:

new MyTask().execute();//执行任务

三、AsyncTask的规则:

1、AsyncTask实例必须在UI线程中创建。

2、execute(Params... params)方法必须在UI线程中调用。

3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法

4、一个AsyncTask实例只能执行一次(只能调用一次execute方法),如果执行第二次将会抛出异常

Android中AsyncTask使用的更多相关文章

  1. Android中AsyncTask异步

    今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...

  2. Android中AsyncTask的使用 (包含文件的下载与存储)

    今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...

  3. Android中AsyncTask使用具体解释

    在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handl ...

  4. 详解Android中AsyncTask的使用

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

  5. 具体解释Android中AsyncTask的使用

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

  6. Android中AsyncTask的简单用法 .

    在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只 ...

  7. Android中AsyncTask的使用

    原文 https://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. ...

  8. android中asynctask的使用实例

    参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html MainActivity.java imp ...

  9. Android笔记(三十五) Android中AsyncTask

    AsyncTask<Params,Progress,Result> 是一个抽象类,通常继承这个抽象类需要指定如下几个泛型参数: 1.  Params :启动任务时出入参数的类型 2.  P ...

  10. 并发编程之Android中AsyncTask使用详解(四)

    更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...

随机推荐

  1. visio二次开发——图纸解析之线段

    多写博客,其实还是蛮好的习惯的,当初大学的时候导师就叫我写,但是就是懒,大学的时候,谁不是魔兽或者LOL呢,是吧,哈哈哈. 好了,接着上一篇visio二次开发——图纸解析,我继续写. 摘要: (转发请 ...

  2. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  3. 第3月第11天 vs2005调试 ace编译

    1.vs2005调试 http://blog.csdn.net/u010797208/article/details/40452797 2.macbook ace编译 小坑: 源代码clockid_t ...

  4. saltstack-部署

    安装epel源(所有主机安装) [root@salt-server /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/r ...

  5. C#高级编程笔记 2016年10月8日运算符和类型强制转换

    1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...

  6. MongoDB_C_Driver使用教程(2)高级连接

    高级连接(Advanced Connection) 以下指南包含MongoDB配置的特定类型的信息. 简单的连接到独立服务器的示例,请参考MongoDB_C_Dirver使用教程. 要连接到启用身份验 ...

  7. canvas的简单圆形进度条

    window.onload = function(){ function arc(canvas,number){ var canvas = document.getElementById(canvas ...

  8. Android Killer工具用法

    一.工程信息 工程信息主要是解析的AndroidManifest文件 二.工程管理器 三.配置插入代码 在代码中点右键就可以一键插入代码了 四.字符串搜索功能 支持正则, 比jeb搜索功能强大 来自为 ...

  9. 无密钥登录的自动脚本实现(ssh-copy-id、expect免交互输入脚本)

    感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...

  10. 超级详细Tcpdump 的用法

    1.抓取回环网口的包:tcpdump -i lo 2.防止包截断:tcpdump -s0 3.以数字显示主机及端口:tcpdump -n 第一种是关于类型的关键字,主要包括host,net,port, ...