android-async-http源码解析

       前面说到了Volley的源码解析,其主要是两个分发线程,一个缓存线程,一个网络线程(网络线程实际上默认开启了4个线程),通过分发线程获取数据然后将结果发送到主线程中更新UI,这里说说android-async-http的源码。   

AsyncHttpRequest类:implement Runnable

       run()方法:1、isCancelled(),如果被取消,直接返回;

                         2、onPreProcessRequest(this);空方法

                         3、responseHandler.sendStartMessage();最终调用AsyncHttpResponseHandler中的handleMessage(Message),调用onStart()方法,空方法;

             4、makeRequestWithRetries();默认标识符retry为true,重复尝试网络请求,网络请求调用makeRequest()方法,执行HttpResponse response =client.execute(request, context);然后调用

responseHandler.onPreProcessResponse(responseHandler, response),空方法;

responseHandler.sendResponseMessage(response);根据response.getStatusLine().getStatusCode值,判断调用sendFailureMessage()还是sendSuccessMessage()方法,然后会调用AsyncHttpResponseHandler中的handleMessage(Message),调用抽象方法onFailure()或者onSuccess(),具体实现在相关实现类更新相关UI。

responseHandler.onPostProcessResponse(responseHandler, response)空方法。

                         5、responseHandler.sendFinishMessage();最终调用AsyncHttpResponseHandler中的handleMessage(Message),调用onFinish()方法,空方法;

                         6、onPostProcessRequest(this);空方法

                         7、isFinished = true;


AsyncHttpResponseHandler类:implement ResponseHandlerInterface接口

 一般线程池网络请求的结果通过responseHandler.sendResponseMessage(response)来调用AsyncHttpResponseHandler中的handleMessage(Message);最终走抽象方法onSuccess(int statusCode, Header[] headers, byte[] responseBody)和onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error);具体的实现在子类方法中实现。



AsyncHttpClient类:

成员变量:ExecutorService threadPool=Executors.newCachedThreadPool()线程池为可缓存的线程池,网络请求相关的DefaultHttpClient httpClient和HttpContext httpContext;

构造方法AsyncHttpClient()AsyncHttpClient(boolean fixNoHttpResponseException, int httpPort,int httpsPort),最终走AsyncHttpClient(SchemeRegistry schemeRegistry) 会给httpClient赋相关的值,

请求网络get(),post(),patch(),put(),delete()等方法都通过RequestHandle sendRequest(DefaultHttpClient client,HttpContext  httpContext, HttpUriRequest uriRequest,String contentType, ResponseHandlerInterface responseHandler,Context context)方法,sendRequest()方法会构造AsyncHttpRequest,然后提交到threadPool线程池,执行任务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值