Android-Async-httpClient 开源代码分析
来源:互联网 发布:无法连接所有网络驱动 编辑:程序博客网 时间:2024/06/04 18:47
一,AysncHttpClient 类:
Android-Async-httpClient核心类,包括在构造方法中初始化DefaultHttpClient的参数属性等,包括设置请求拦截器和响应拦截器,设置重试handler。
1,线程池。
AysncHttpClient利用线程池来管理请求线程,通过调调用Executors.newCachedThreadPool()来创建线程池,该线程池会根据需要来创建线程,如果构造的线程可用时候会重用他们,如果现有线程没有可用的,则创建新的线程并加入到线程池,会终止并移除那些已经有60秒没有被使用的线程。
2,请求拦截器,响应拦截器。
在构造方法中设置了HttpClient请求拦截器和响应拦截器,在请求拦截器中处理了请求头Header参数和认证。响应拦截器中处理压缩文件的处理,response.setEntity(new InflatingEntity(entity));设置GZIPInputStream。
3,请求重试机制。
httpClient.setHttpRequestRetryHandler(new RetryHandler(DEFAULT_MAX_RETRIES, DEFAULT_RETRY_SLEEP_TIME_MILLIS));通过设置请求重试handler实现了5次的重试和1.5秒的延迟重试时间。
RetryHandler定义了那些异常需要重试那些异常则不需要重试。对于:NoHttpResponseException,UnknownHostException,SocketException异常需要重试;InterruptedIOException,SSLException则不需要重试。
4,支持重定向。
通过调用httpClient.getParams().setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, enableCircularRedirects),支持环形重定向,即支持重定向之前重复的地址。
5,发送请求。
调用sendRequest()方法,每次请求都会新建一个请求线程AsyncHttpRequest,并启动此线程。然后新建一个请求手柄RequestHandle,该请求手柄含有AsyncHttpRequest的引用,用来管理AsyncHttpRequest,包括取消请求任务cancel和清除任务,每个RequestHandle都会保存在List中,该List又保存在Map中,键值对context-List。
二,MyRedirectHandler类:
重定向Handler类,继承自DefaultRedirectHandler,当需要重定向时候,则重定向。
1,重写isRedirectRequested方法,当服务器返回301,302,303,307时isRedirectRequested方法返回true,其他返回false。
2,重写getLocationURI方法,返回重定向的uri,从Header中获取重定向的地址,
Header locationHeader = response.getFirstHeader("location");
String location = locationHeader.getValue().replaceAll(" ", "%20");
注意:当重定向地址和前一个请求地址相同时,需要设置环形重定向,否则会报CircularRedirectException,如:
httpClient.getParams().setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
运用:httpClient.setRedirectHandler(new MyRedirectHandler(enableRedirects));
三,MySSLSocketFactory类:
SSL安全套接字工厂类,继承自SSLSocketFactory,用于https加密请求。
本文引用文章:
HttpClient的CircularRedirectException异常原因及解决办法
- Android-Async-httpClient 开源代码分析
- Android-Async-HttpClient 源码解析
- HttpClient源代码分析之HttpClient模块(转)
- HttpClient源代码分析之HttpClient模块
- HttpClient源代码分析之HttpClient模块
- android-async-http 源码分析
- Android HttpClient对象分析
- Andorid Async-HttpClient解读
- Android之Async Task异步任务分析
- android-async-http框架源码分析
- android-async-http介绍与分析
- 项目网络框架android-async-http分析
- android-async-http源码宏观分析
- android-async-http ,volley ,okhttp分析
- 安能饭否Android客户端开源代码框架分析
- Android源代码简要分析
- Android源代码简要分析
- android源代码结构分析
- android 邮件开发之javamail
- 数位DP模板
- Leetcode_LongestSubstringWithoutRepeatingCharacters
- Tigase XMPP Server 安装与常见问题
- 2014 Multi-University Training Contest 1
- Android-Async-httpClient 开源代码分析
- vpnc 对独立网段及独立主机的分割隧道(split tunne)建立
- Spring 注解学习(二) 控制层梳理
- 查找oracle数据库表中是否存在系统关键字
- ios除去可变字符串中的某些字符
- 了解Web Analytics(分析)的好处
- DFS/BFS模版
- 八大排序算法
- 东南亚陶瓷等非金属矿产原料分布