AsyncTask

AsyncTask概述

 

AsyncTask是google公司封装的一个轻量级的异步任务类。相信大家对AsyncTask都不陌生,对于执行耗时任务,然后更新UI是一把利器,当然也是替代Thread + Handler 的一种方式。

实际上它内部就是通过Thread + handler实现的。如果没有AsyncTask类,我们完全可以用thread+handler来处理。这个时候就很可能自己回去封装一下thread+handler了。正是因为这类需求很多,google就帮我们封装了一下。其实我们也可以自己封装,但是我相信99%程序员自己封装的东西比不上google的。所以还是有必要学习一下AsyncTask。

 

AsyncTask:异步任务

---------------------------------------------

异步任务中的泛型:

1.Params:表示执行该任务时,是否需要参数,如果需要,那么需要什么类型的参数

2.Progress:表示执行任务的过程中,是否需要更新进度,如果需要,用什么类型的数据表示进度

3.Result:表示执行任务后,是否需要结果,如果需要,那么使用什么类型表示任务的执行结果

以上确定的数据类型将应用于任务的各方法中,如果不需要某部分的类型,则可以使用java.lang.Void类型表示

异步任务中的方法:

1.doInBackground() -> 该方法是抽象方法,需要被重写,该方法是运行在子线程的方法,用于执行任务的耗时操作,该方法的参数是Params类型的可变参数,返回值是Result类型的数据

2.publishProgress() -> 该方法是需要进度时,在doInBackground()中调用的方法,该方法的参数是Progress类型的可变参数

3.onProgressUpdate() -> 该方法在每次调用publishProgress()后被回调,是运行在主线程的,该方法并不是抽象方法,如果需要更新进度,则应该重写该方法,该方法的参数是Progress类型的可变参数,是调用publishProgress()方法时使用的参数

4.onPostExecute() -> 该方法是在doInBackground()执行完毕之后被回调的方法,是运行在主线程的,该方法并不是抽象方法,如果任务执行完成之后需要更新界面显示,则应该重写该方法,该方法的参数是Result类型的,是doInBackground()方法的返回值

异步任务的特点:

1. 集中管理同一个业务的相关代码

2. 所有任务会依次执行,注意:假设TaskA、TaskB都继承自AsyncTask,并分别创建对象,在执行这2种任务时,这2种任务也会是依次执行的

3. 异步任务是可以取消的,但是,只能取消其主线程的操作,和没有开始的子线程的操作,即,如果子线程(doInBackground())已经开始工作,是不可以中途取消的

 

为了正确的使用AsyncTask类,以下是几条必须遵守的准则: 

1)Task的实例必须在UI thread中创建 

2)execute方法必须在UI thread中调用 

3) 不要手动的调用onPreExecute(),onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)这几个方法 

4) 该task只能被执行一次,否则多次调用时将会出现异常 

 doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第三个为doInBackground返回和onPostExecute传入的参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值