文档章节

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

暂无文章

高三暑假我是怎么想开去学linux系统的

高三的时候,我有一句口头禅:“老了老了,现在做题越来越迟钝了”。当时整天日夜苦读,体重日益增加,脸色越来越黯淡,我在终于熬过了高考的时候,简直心里面乐得开了花。我终于可以去做自己...

linuxprobe16
25分钟前
0
0
Python 获得命令行参数的方法

需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2]

编程老陆
32分钟前
0
0
链队

队列用链表来表示时,需要用两个变量来记录队列两端的变化:theFront,theBack. 根据链接方向的不同,链队有两种链接方式(其实就是链表的头插入节点和尾插入节点,头删除节点和尾删除节点)。...

Frost729
35分钟前
0
0
IDEA toString() json模板

public java.lang.String toString() {java.lang.StringBuilder builder = new java.lang.StringBuilder();#set ($i = 0)#foreach ($member in $members)#if ($i == 0)builder.appen......

Mtok
45分钟前
0
0
Dubbo内核实现之SPI简单介绍

Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLo...

明理萝
50分钟前
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部