文档章节

AsyncTask的使用

八阿哥
 八阿哥
发布于 2015/12/15 17:33
字数 698
阅读 14
收藏 0
点赞 0
评论 0

一:原理

        android中实现异步任务机制的方式有Handler和AsyncTask两种方式;

        Handler处理模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例发送消息,完成UI界面的更新,这种方式对于整个过程的控制是相当精细的,但是同时代码很臃肿,在多个任务同时执行时,不易对线程进行精确的控制;

        为了简化操作,android1.5提供了工具类AsyncTask,它使得创建异步任务非常的简单,不再需要编写任务线程和Handler实例即可完成相同的任务;




二:介绍

        1》类的介绍

            public abstract class AsyncTask<Params, Progress, Result> {};

            参数一:启动任务执行的输入参数,也就是往doInBackground(Params... params)方法中传入的参数;

            参数二:后台任务执行的进度参数,也就是往onProgressUpdate(Progress... values)方法中传入的参数;

            参数三:后台任务的执行结果,也就是doInBackground(Params... params)方法的返回值类型,同时onPostExecute(Result result)方法的参数类型也是这个!

                ****开发中根据实际情况,如果没有被使用到的参数可以用java.lang.Void代替;


        2》方法介绍

            a:    execute(Params.. params)——执行异步任务,在这里传入的参数会传入到doInBackground(Params... params)中!!

            b:    onPreExecute()——在execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记;

            c:    doInBackground(Params... params)——在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。

            d:    onProgressUpdate(Progress... values)——在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。 

           e:    onPostExecute(Result result)——后台操作结束时(doInBackGround()方法执行完毕),此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。


三:相关注意点

            1》异步任务的实例必须在UI线程中创建;

            2》excute(Params.....params)方法必须在UI线程中调用;

            3》不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法;

            4》不能在doInBackground()方法中修改UI界面;

            5》一个任务实例只能被执行一次,如果执行多次会抛出异常;


            *****onPreExcute()——在UI线程中执行;

                    doInBackgroud()——在子线程中执行;

                    onPostExecute()——在UI线程中执行;

                    onProgressUpdate()——在UI线程中执行;




© 著作权归作者所有

共有 人打赏支持
八阿哥
粉丝 2
博文 22
码字总数 6600
作品 0
东城

暂无相关文章

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部