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只能被执行一次,否则多次调用时将会出现异常

最新文章

  1. .NET Core 首例 Office 开源跨平台组件(NPOI Core)
  2. Intellij IDEA 13.1.3 使用Junit4
  3. 超越 JSON: Spearal 序列化协议简介
  4. MySQL高可用方案
  5. &lt;&lt;&lt; sqlserver、Mysql、Oracle数据库优缺点
  6. &lt;转&gt;VPN技术原理
  7. mybatis动态sql中的trim标签的使用
  8. ES6-函数扩展
  9. Web端文件打包.zip下载
  10. hdu 5769 Substring 后缀数组 + KMP
  11. Cocos2d-X采用CCScrollView创建滚动视图
  12. 深入理解HTTP协议—HTTP协议详解(真的很经典)
  13. 10分钟入门kubernetes(上)
  14. 【JDK源码】将JDK源码导入IDEA中
  15. 类中添加log4j日志
  16. 查看SQL Server的版本及License
  17. Win7 在安装vs2010后向sql2008添加SQL_Server_Management详解
  18. 0324操作系统cmd功能的扩展
  19. 数据库 插入时 碰到NULL报错判断的一种方法(技巧)
  20. IDEA下clean Maven项目

热门文章

  1. 在 eclipse 中设置每行的字数
  2. 自动化 测试框架部署(python3+selenium2)
  3. 几个经常用到的字符串的截取(java)
  4. QTP10补丁汇总
  5. php截取字符串中的关键字,并高亮显示
  6. 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍
  7. lintcode:买卖股票的最佳时机 III
  8. lintcode: 生成括号
  9. LoadRunner8 安装步骤
  10. try catch语句在VC下的处理