Android异步任务类分析

一、为什么要使用异步任务类?

Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler对象向UI线程发送消息,完成界面的更新,

这种方式对整个界面的控制非常精细。

但是也有缺点,例如代码臃肿,所以为了简化操作,Android 1.5 sdk 提供了一个工具类 AsyncTask(异步任务类),

使得创建异步任务变的更加简单。

二、异步任务类的实现

异步类实现计数演示过程:

首先在 主Activity文件中:(主Activity用来解析程序的第一个界面)

1. 创建异步类任务的对象,并给异步类的构造传递一个文本对象的引用,这样在异步任务中能操作这个文本框;

2. 使用异步类对象的引用调用 execute(Params .. Params)方法,执行异步任务。也即进入了我们创建的异步任务中去执行;

说明:

execute()可以传递多个参数,传递的参数类型受异步类的第一个参数类型决定,如果异步类的第一个参数类型为Integer类型,

那么execute传递的参数就必须是整型的,以此类推;

在异步类用doInBackground(Integer ... params)方法来接收execute传递的参数,这种参数的写法表示,用来接收多个传递来

的参数,都保存在数组params[ ]中,params[0]表示传递的第一个参数,以此类推;

主Activity代码如下:

进入了我们创建的异步任务中:

首先介绍一下这个异步任务类的创建及相应参数说明:

a. 在创建AsyncTask类(异步任务类)的时候,要设定数据类型;(称为Android的泛型编程)

参数说明:

b. 通俗说一下参数:

第一个参数的类型,就是我们在执行execute()方法时要传递的参数类型,还有接收该参数的方法doInBackground()的参数类型保持一致;

第二个参数的类型,就是onProgressUpdate(..)方法接收publicProgress()方法传递数据对应的类型;

第三个参数的类型,就是接收doInBackground()方法的返回值的类型;

3.  在execute方法执行后,也即启动了异步任务,onPreExecute()方法立即被执行;

4.  在onPreExecute()执行完成后,立即执行doInBackground()方法;

该方法的说明:

a. 该方法被子线程调用;

b. 将耗时的操作放在该方法中;

c. 在该方法中,通过异步类的对象调用publishProgress()该方法,要求系统自动调用onProgressUpdate()方法;类似handle的用法;

d. 该方法的返回值,赋值给了类的第三个参数Result;

5. 由于上面调用了publishProgress()该方法,会要求系统的UI主线程自动调用onProgressUpdate()方法;

a. 该方法被UI主线程调用;

异步任务效果图:

异步任务实现列表的刷新:

实现代码:

时间: 2024-10-10 18:25:33

Android异步任务类分析的相关文章

一套完善的Android异步任务类

欢迎各位加入我的Android开发群[257053751] 今天向大家介绍一个很有用的异步任务类处理类,分别包含了AsyncTask各个环节中的异常处理.大量并发执行而不发生异常.字符串数据缓存等功能.并且感谢@马天宇(http://litesuits.com/)给我的思路与指点. 研究过Android系统源码的同学会发现:AsyncTask在android2.3的时候线程池是一个核心数为5线程,队列可容纳10线程,最大执行128个任务,这存在一个问题,当你真的有138个并发时,即使手机没被你撑

Android异步消息处理机制详解及源码分析

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 最近相对来说比较闲,加上养病,所以没事干就撸些自己之前的知识点为博客,方便自己也方便别人. 1 背景 之所以选择这个知识点来分析有以下几个原因: 逛GitHub时发现关注的isuss中有人不停的在讨论Android中的Looper , Handler , Me

拨云见日---android异步消息机制源码分析

做过windows GUI的同学应该清楚,一般的GUI操作都是基于消息机制的,应用程序维护一个消息队列,开发人员编写对应事件的回调函数就能实现我们想要的操作 其实android系统也和windows GUI一样,也是基于消息机制,今天让我们通过源码来揭开android消息机制的神秘面纱 谈起异步消息,就不能不提及Handler,在安卓中,由于主线程中不能做耗时操作,所以耗时操作必须让子线程执行,而且只能在主线程(即UI线程)中执行UI更新操作,通过Handler发送异步消息,我们就能更新UI,一

Android异步任务AsyncTask的使用与原理分析

在上一篇文章<Android缓存机制&一个缓存框架推荐>中说到,在了解了Android缓存机制后我准备自己动手写一个LruCache和DiskLruCache二级缓存的轻量级的图片请求框架,在思考如何搭建这个框架时,纠结于用何种方式去下载图片,是直接new出一个线程呢,还是用看起来稍微高大上档次一点的AsyncTask异步任务来处理?思来想去,还是虚荣心作怪,还是用AsyncTask吧,正好这个工具类我之前用的也比较少,对它的原理也不是很清楚,趁这个机会,好好学一下AsyncTask的

Android异步消息处理 Handler Looper Message关系源码分析

# 标签: 读博客 对于Handler Looper Message 之前一直只是知道理论,知其然不知所以然,看了hongyang大神的源码分析,写个总结帖. 一.概念.. Handler . Looper .Message 这三者都与Android异步消息处理线程相关的概念. 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环.若消息队列为空,线程则会阻塞等待. 说了这一堆,那么和Handle

android异步类AsyncTask的简单使用

Android为了降低这个开发难度,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务,更通俗地说就是一个执行后台任务的线程 而且他还会自动通知主线程更新UI 优点: 结构清晰,容易理解. 缺点 代码量稍大 下面直接看代码 1 private class AsyncLogin extends AsyncTask<Void,Integer,Boolean>{ 2 private EditText passwordEdit; 3 private EditT

Android异步消息传递机制源码分析&amp;&amp;相关知识常被问的面试题

1.Android异步消息传递机制有以下两个方式:(异步消息传递来解决线程通信问题) handler 和 AsyncTask 2.handler官方解释的用途: 1).定时任务:通过handler.postDelay(Runnable r, time)来在指定时间执行msg. 2).线程间通信:在执行较为耗时操作的时候,在子线程中执行耗时任务,然后handler(主线程的)把执行的结果通过sendmessage的方式发送给UI线程去执行用于更新UI. 3.handler源码分析 一.在Activ

Cordova Android源码分析系列二(CordovaWebView相关类分析)

本篇文章是Cordova Android源码分析系列文章的第二篇,主要分析CordovaWebView和CordovaWebViewClient类,通过分析代码可以知道Web网页加载的过程,错误出来,多线程处理等. CordovaWebView类分析 CordovaWebView类继承了Android WebView类,这是一个很自然的实现,共1000多行代码.包含了PluginManager pluginManager,BroadcastReceiver receiver,CordovaInt

Android异步加载全解析之使用多线程

异步加载之使用多线程 初次尝试 异步.异步,其实说白了就是多任务处理,也就是多线程执行,多线程那就会有各种问题,我们一步步来看,首先,我们创建一个class--ImageLoaderWithoutCaches,从命名上,大家也看出来,这个类,我们实现的是不带缓存的图像加载,不多说,我们再创建一个方法--showImageByThread,通过多线程来加载图像: /** * Using Thread * @param imageView * @param url */ public void sh