AsyncTask异步任务

       首先AsyncTask作为一个大开销的帮助类,在Android开发中避免不了去使用,如果访问了URL,Web接口,那么就有可能已经使用了AsyncTask;如果在使用中正在执行一个Activity的异步下载操作,屏幕旋转了或则来了电话,中断了Activity,如果接着使用当前的Activity,那么就会执行Rescreat()方法了;但是这个时候AsyncTask是一直继续进行的,并且会得到一个null指针指向老的Activity(重启了一个Activity的时候内存中的对象不是同一个了,所以也同样会继续执行在新的Activity中),这个时候的被中断前的Activity不知道是否会接收到AsyncTask的结果,但是中断后的Activity是不是得到中断前的AsyncTask的数据。

选择使用AsyncTask的时候,一般会纠结与使用Handler或者AsyncTask去处理数据,会想知道这两个到底哪一个更加轻量级,(查阅网上说AsyncTask在代码上会比Handler更加轻量级,因为AsyncTask开启的是一个线程池,而Handler只是发送了一个消息的队列,这个过程还没有去开启Thread);所以如果处理数据量大的时候使用AsyncTask会更加具有好处(因为它开启的是一个线程池,比使用Handler开启一个Thread要好的多)。

对于AsyncTask的方法中:

1、最重要的方法:doInbackground(params,progress,result){};

这个方法中处理耗时操作,不能更新UI,只是在后台工作;

params:启动AsyncTask的访问的参数,一般为URL,类型为String;

progress:后台任务所执行的百分比,一般是进度条的类型,Integer或者不适用直接Void;

result:最后返回的结果类型,一般为List、String类型;

2、1方法后执行的方法onPostexecute(result){};

这个方法类似于使用Handler处理UI的效果,把1中的方法的结果处理更新UI,这个方法必须在主线程中去执 行,执行后的结果作为这个方法的参数返回;

3、onProgressupdata(progress){};主线程中处理这个方法,主要作用显示任务的进度情况;

4、onPreexecute(){};执行1方法前调用,做一些数据前的处理,主要显示进度条的使用;

5、onCancalled(){};调用取消操作时,需要做的一些处理;

看到网上的一些:

使用AsyncTask类,遵守的准则:1,  Task的实例必须在UI thread中创建;2,  Execute方法必须在UI thread中调用3,  不要手动的调用onPfreexecute(),onPostExecute(result)Doinbackground(params…),onProgressupdate(progress…)这几个方法;4,  该task只能被执行一次,否则多次调用时将会出现异常;

AsyncTask 的优势体现在:
1、线程的开销较大,如果每个任务都要创建一个线程,那么应用程 序的效率要低很多; 
2、线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多 的线 程,系统将不堪重负。 
3、另外,前面已经看到,在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值