1、定义

        异步任务类,在类中实现异步操作,并提供回调方法反馈当前异步执行的程度,最后反馈 的结果提供给UI主线程。
        <1>Android线程
                (1)MainThread主线程(也称UI线程):应用启动时创建,处理与UI相关事情,如点击事件、数据更新;
                (2)WorkerThread子线程:Android4.0之后UI线程不能访问网络资源或执行耗时操作,必须开启子线程;
        <2>主、子线程必须遵循的两条规则:
                (1)Do    not    block    the    UI    thread.(主线程不能被阻塞) 
                (2)Do    not    access    the    Android    UI    toolkit    from    outside    the    UI    thread.(非主线程不能更新UI)
        <3>回调方法
                (1)必须实现的方法
                                doInBackground(Params...params)后台执行的任务;在子线程中调用的方法,要做耗时操作就在这个方法中执行;
                                doPostExecute(Result result)任务完成,UI线程执行;在主线程中执行,在doInBackground之后调用,doInBackground返回的结果就到了这个方法中;
                (2)其他实现方法
                                onPreExecute()后台任务开始之前的准备工作,UI线程执行;在主线程中执行,在doInBackground之前,在这个方法中一般做耗时操作之前的准备工作;
                                onProgressUpdate(Progress... values) 当前执行的进度,UI主线程执行;在主线程中运行,用来发布进度值;作用:一般用于更新UI中的ProgressBar进度条;用法:必须在doInBackground的方法体中调用 publishProgress(Progress... values)方法
                                onCancelled() 取消任务,任务正在执行的情况;在主线程中执行。取消下载任务,doInBackground()方法就不会再继续执行;在启动异步任务的类中调用取消异步任务的方法 XXX.cancel(true);
        <4>AsyncTask的一般用法:
                (1)创建类,继承AsyncTask,并指定三个泛型
  1. public class ImgAsy extends AsyncTask<String, Integer, Bitmap>
                                第一个泛型:Params,执行下载任务的地址类型,一般是请求的URL或String;决定了doInBackground()方法的参数类型;
                                第二个泛型:Progress,显示进度值得类型,常用类型是Integer;决定了onProgressUpdate()方法的参数类型;
                                第三个泛型:Result,下载线程执行完成后返回的结果,常用Bitmap;决定了doInBackground()方法的返回值类型,决定了onPostExecute的参数类型
                (2)重写两个必要的方法
                (3)重写可选的方法
                (4)在UI线程中,实例化AsyncTask对象,并将UI控件作为构造参数传入;
                (5)在UI线程中,执行AsyncTask对象的execute(...)方法,开始执行异步任务;
                (6)异步开始执行后,执行AsyncTask对象的cancel(true)方法,停止异步任务;

<5>使用AsyncTask必须遵守的准则:

                (1)三个泛型的使用位置;
                (2)Task的实例必须在UI  thread中创建;
                (3)execute方法必须在UI  thread中调用;
                (4)该Task只能被执行一次,否则多次调用时将会出现异常

AsyncTask类的更多相关文章

  1. android开发之路12(android四大组件&Fragment&AsyncTask类)

    一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...

  2. Android的AsyncTask类的解读

    国庆节放假.搞了半个月都没有上班了,coding的时候一点都不在状态,本来这篇文章是在国庆节前写完的,可是由于自己的懒 惰,导致延期到国庆节,哎,这种习惯真心不好呀...不多说了以下来进入正题 之前我 ...

  3. 使用AsyncTask类实现简单的异步处理操作

    AsyncTask: 1.这是一种相比Handler更轻量级的处理异步任务的工具类 2.它和Handler类一样,都是为了不影响主线程(UI)而使用的((注:UI的更新只能在主线程中完成) 3.这个工 ...

  4. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

  5. 【Android多线程】异步任务AsyncTask类

    https://www.bilibili.com/video/av65170691?p=9 (本文为此视频观看笔记) 一.为什么需要此类 Handler繁琐 二.理解AsyncTask 2.1 参数( ...

  6. Android中异步类AsyncTask的理解

    这里有两种解释的方法,各有侧重点: 第一种解释: Async Task 简介:AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦  ...

  7. 异步处理工具类:AsyncTask

    (一) AsyncTask,是android提供的轻量级的异步类.可以直接继承AsyncTask,在类中实现异步操作,可以通过接口实现UI进度更新,最后反馈执行的结果给UI主线程 .之所以有Handl ...

  8. Android笔记——AsyncTask介绍

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

  9. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

随机推荐

  1. poj 3255(次短路)

    题目链接:http://poj.org/bbs?problem_id=3255 思路:分别以源点1和终点N为源点,两次SPFA求得dist1[i](1到各点的最短距离)以及dist2[i](各点到N的 ...

  2. JDK安装(windows/linux)

    双击安装...安装之后需要进行一些相关的配置工作...下面是我自己总结的安装和配置步骤: (1)非Win7系统 第一步:安装jdk,下载地址:http://www.oracle.com/technet ...

  3. redis资料汇总

    redis资源比较零散,引用nosqlfan上的文章,方便大家需要时翻阅.大家看完所有的,如果整理出文章的,麻烦知会一下,方便学习. 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redi ...

  4. WaitForSingleObject与WaitForMultipleObjects用法详解(好用,而且进入一个非常高效沉睡状态,只占用极少的CPU时间片)

    在多线程下面,有时候会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects ...

  5. 读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots

    读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots   以下为异常详细信息: Exception in thread &q ...

  6. Java:Object类

    objcet类中涉及的多态的扩展性,由于Object是所有类的根类,所以它可以接收任意类型的数据,包括基本数据类型.因为这一特点,它可以对多态性进行扩展. 1.创建一个Demo类来判断类类型 clas ...

  7. oracle服务、客户端 plsql配置

    1.oracle服务端安装 Oracle 9i 的安装(图解) 2.oracle客户端安装 http://wenku.baidu.com/view/8be28581f524ccbff0218427.h ...

  8. Linux下安装mysql-5.6.4 的图文教程

    在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因此当我们配置安装目录./configure --perfix ...

  9. jquery Deferred demo

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Vim 新用法

    daw , delete a word cw , delete from cursor to the end then insert mode a word 移动: f ; Aa Oo Cc Ii S ...