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线程池,执行任务。

你可能感兴趣的:(android-async-http源码解析)