文档章节

AsyncTask的使用

八阿哥
 八阿哥
发布于 2015/12/15 17:33
字数 698
阅读 15
收藏 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
博文 23
码字总数 6600
作品 0
东城
私信 提问

暂无文章

零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云云栖社区
13分钟前
0
0
OkHttpClient封装

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import o......

尘叙缘
15分钟前
1
0
零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云官方博客
15分钟前
0
0
centos 7 nginx_install.sh

#!/bin/bashset -eprintf "============开始安装nginx\n"printf "============输入nginx下载url,按Enter默认下载1.14.2版本\n"download_url='';while truedoread down...

偶遇一只小仙女
16分钟前
0
0
数据库高并发下乐观锁的原理

在高并发下,经常需要处理SELECT之后,在业务层处理逻辑,再执行UPDATE的情况。 若两个连接并发查询同一条数据,然后在执行一些逻辑判断或业务操作后,执行UPDATE,可能出现与预期不相符的结...

hansonwong
18分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部