android多线程 异步请求 AsyncTask使用心得

android的多线程总是比较头疼的事情,然而多线程又分为同步机制和异步机制,根据业务的需要我们选择相应的机制


最近有个需求是根据包裹上的地址获得地址的经纬度,然后在高德地图上标注包裹的位置,刚开始我对在地图上标注包裹这个逻辑采用同步机制,发现包裹数量一多就会卡死,最后采用异步机制解决问题。


我查过很多异步请求的资料最后还是采用了AsyncTask,其实能够理解好AsyncTask这个类就Ok了


先来看看AsyncTask

public abstract class AsyncTask<Params, Progress, Result>

从定义可知它是一个抽象类,如果要使用它,需要自定义一个类实现它才能使用 

参数1 Params:就是在执行异步请求时传递的参数,比如你异步请求是根据用户账号向服务端请求用户密码,那么你在异步请求密码时肯定要传递用户的账号,一般账号都是String类型 此时AsyncTask<String,Progress,Result>


参数2  Progress:就是异步请求在后台执行时,请求数据的进度,比如从异步请求下载一段视屏的进度条,在执行请求时要实时更新下载的进度,而一般下载视频的数据是byte[]

此时应该是AsyncTask<Params,byte[],Result>


参数3 Result:这个参数比较好理解,就是异步请求完成时需要返回的数据


如果当某个参数不需要时就用Void


下面介绍它的几个函数

1.onPreExecute(),在启动异步请求后立即执行,一般用来在执行后台任务前对UI做一些预处理,比如显示进度条。

2.doInBackground(Params... params) ,执行异步请求后台逻辑函数,请求数据逻辑函数,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息,比如下载视屏,下载视屏的主要逻辑就在这个函数。

3.onProgressUpdate(Progress... values),更新函数,也就是在调用publishProgress(Progress... values)后执行的函数,用来管理异步请求的进度,可以将进度信息直接更新到UI线程的组件上。

4.onPostExecute(Result result),当异步请求结束时,此方法将被调用,将请求结果做为参数传递到此方法中,直接将结果显示到UI线程组件上去。


怎么开启异步请求呢


首先自定义一个类继承AsyncTask类

class MyTask extends AsynxTask<Params,Progress,Result>{

}


然后在需要开启异步请求逻辑的地方 new MyTask().excute(Params,Progress,Result);


有什么不对之处请指正,相互交流学习,学习是程序员的生存之道啊



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值