AsyncTask的实现机制

如何正确选择AsyncTask还是Handler?与Handler相比,AsyncTask消耗资源如何?是多线程吗?先抛出疑问。

一 AsyncTask是什么:

1)Android为了降低异步操作开发难度,结合Handler和线程池,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,异步任务。他具有可以再后台执行耗时操作,同时可以将执行进度与UI进行同步。

2)AsyncTask定义了三种泛型类型,Params,Progress、Result。

>Params启动任务执行的输入参数,比如http请求的url;

>Progress后台任务执行的百分比;

>Progress后台执行任务最终返回的结果,比如String。

3)AsyncTask常用方法

>doInBackground(Params...)后台执行,比较耗时的操作都可以放在这里进行。注意这里不能直接操作UI。此方法在后台进程中尅调用publicProgress(Progress...)来更新任务的进度。

>onPostExcute(Result)相当于Handler处理UI的方法,在这里可以使用doInBackground得到结果处理操作UI。此方法在主线程中执行,任务执行的结果作为方法的参数返回;

>onProgressUpdate(Progress...)可以使用进度条增加用户体验,此方法在主线程执行,用于显示任务执行进度;

>onPreExcute()这里是最终用户调用Excute时的接口,在任务执行之前开始调用此方法,可以再这里显示进度对话框;

>onCancelled()用户调用取消时,要做的操作。

4)AsyncTask三种状态

pending,running,finished

5)AsyncTask使用规则

>AsyncTask必须在主线程创建;

>execute()只能调用一次,也必须在主线程中执行;

>不要自己调用onPreExcute(),onPostExcute(),doInBackgound(),onProgressUpdate(),系统自己调用。


二AsyncTask与Handler对比

通过看源码,发现AsyncTask实际上就是一个线程池(包含了Handler ThreadPoolExecutor),所以AsyncTask比handler更耗资源,虽然AsyncTask在代码上比handler要轻量级别。而Handler仅仅就是发送了一个消息队列,连线程都没有开,他只是依附在创建的线程中。
但是,如果异步任务的数据特别庞大,AsyncTask这种线程池结构的优势就体现出来了。

所以,什么时候使用AsyncTask,什么时候使用Handler就非常明显了。

>任务可以被终止,并需要不断使用时,用AsyncTask;

>任务需要被多次重复执行,且与UI交互少时,用Handler。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值