关于AsyncTask异步任务的见解

在Android中实现异步任务有两种方式: Handler 和 AsyncTask ;

这两种,有什么区别呢? Handler有什么优点或者缺点? AsyncTask有什么优点缺点呢?

可以这么说 :AsyncTask是Handler+Thread的良好封装,是一种较轻量级的异步类。它有一定的优势,同时也会有少许不足之处。

优点:1.操作简单,方便:因为是已经封装了的,提供一些良好的接口,所以操作起来更为简单。

            2.过程可控:通过某些操作,可以使AsyncTask停止异步任务,所以便于控制。

缺点:1.不适用于多个异步任务。由于封装很好,在使用多个异步操作,同时需要对UI进行更新时,这个整个代码就会变得繁琐,复杂。


来说说 Handler 

优点:1.结构清晰,功能明确。由于Handler是使用一个异步操作就写一个,所以一个Handler的功能很清晰。

            2.适用于多个后台操作,它的优点正好弥补了AsyncTask的不足,在多个异步任务时,Handler的使用更为清晰,简单。

缺点:1.单个后台处理,代码量过多,冗余复杂。


下面来谈谈AsyncTask:

在继承AsyncTask这个类的时候会提供三个泛型参数: Params,Progress, Result

1.Params:启动任务时需要输入的参数 (可以是一个URL,也可以是一个Integer数据)

2.Progress:后台执行任务的进展情况(提供一个百分比)

3,.Result:后台返回结果的类型


步骤:

1.execute(Params...params) , 在代码中调用这个方法,实现异步任务的执行。

2.onPreExecute() , 在execute(Params...params)被调用之后执行,一般用来执行后台任务前对UI的标记

3.doInBackground(Params...params) , 在 onPreExecute()  完成后立刻执行,用于执行很费时的操作,这个方法将接收输入参数和返回结果。同时可以调用 

publishProgress(Progress...values) 来更新信息。

4.onProgressUpdate(Progress...values)  在调用 publishProgress(Progress...values)时,此方法被执行,直接将信息更新至UI组件上。

5.onPostExecute(Result result) ,当后台结束之后,此方法被调用,计算结果作为参数传递到这个方法中,直接显示到UI组件上。


需要注意的:

1.异步任务必须在UI线程中创建,且一个任务实例只能调用一次,执行第二次会抛出异常

2. execute(Params...params)必须在UI线程中调用

3.不能手动调用 onPreExecute() ,doInBackground(Params...params) ,onProgressUpdate(Progress...values) ,onPreExecute(Result result) ,方法

4.不要在 doInBackground(Params...params) 方法中更新UI信息。


这几个函数的执行顺序图:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值