文档章节

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
东城

暂无文章

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
26分钟前
1
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
41分钟前
4
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
3
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
1
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部