Android中异步请求之AsyncTask使用

虽然前面提到了Android开发之数据请求方式有多线程+Handle方式、还有AsyncTask方式大致的2种请求原理,AsyncTask在APP中的同一个界面异步请求API使用得不是很频繁得情况下,还是蛮有用的。记得以前在一个APP应用界面中,由于写服务器API的同事没有很好的处理API的数据,导致在一个APP的界面上使用到的数据通过几次(大于4次)的AsyncTask来请求API数据,出现的现象就是其中的数据速度不快,或者其中的某一次、某几次没有结果响应。在此,我重复一次:一个APP界面数据的流畅与服务器API的配合非常重要(如:数据的分页加载、数据的格式处理、数据的排序加载、数据的分类加载 ......)。


     下面介绍 Android中异步请求之AsyncTask使用:

            

AsyncTask 是 Android 提供的一种异步任务处理类,它与线程类 Thread 相比,有以下优势:

1.preExcute() & postExcute()方法不仅可以进行预处理 & 收尾工作,而且它们归属于 UI 线程,所以你可以进行开启、关闭 loading 对话框等操作。

2.doInBackground()方法 & 构造器都支持泛型参数,且内部可以进行参数传递,封装性较好,注意doInBackground()属于后台线程,不能执行 UI 操作。

3.AsyncTask 比 Thread 更容易控制,它提供了cancel()方法,关于AsyncTask生命周期,

一、定义

    1. private class MyAsyncTask extern AsyncTask{  
    2. ...  
    3. }  

二、实例化 & 执行

    1. MyAsyncTask task = new MyAsyncTask();  
    2. task.excute();  

三、AsyncTask 的生命周期

AsyncTask 会依次执行 onPreExcute()—doInBackground()—[可能执行onCancel()]—onPostExcute().

四、注意事项:

1.AsyncTask 的最大上限数量

我没有在SDK的文档中找到具体说明,但开发中已经领教过了,同种类型的 AsyncTask 实例,最大数量为 20 个。

如果超过,则会引发 RejectExcuteException,并 crash

因此,要考虑到用户的操作是否会引发频繁的 AsyncTask 实例化,若存在,则从 UI 上进行改进,比如:

分页机制;

线程池;

生产者-消费者模型。

2.取消AsyncTask任务

文档已经说明,cancel()方法不一定能成功,所以 onCancel() 回调方法不一定被调用。

但若一个 AsyncTask 结束,则一定会调用 onPostExcute() 方法。

对于一个 doInBackground()方法中含有 while/for 循环时,最好配置 isCancel标置来 break 循环。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值