20170310-Android网络框架Nohttp-万峥嵘1

preview
需积分: 0 0 下载量 13 浏览量 更新于2022-08-08 收藏 998KB DOCX 举报
《Android网络框架NoHttp详解》 在Android应用开发中,网络请求是必不可少的一环,而选择一个高效、易用的网络框架能极大地提高开发效率。本文将深入探讨Android专用网络框架NoHttp,分析其特性、与OkHttp的异同,并解析其核心API。 NoHttp作为一个专为Android设计的网络请求框架,具有以下显著特点: 1. **并发支持**:NoHttp支持并发请求,能够同时处理多个网络任务。 2. **异步/同步请求**:它允许开发者根据需求选择异步或同步的方式进行网络操作。 3. **Cookie管理**:自动维护Cookie,确保会话状态的连续性。 4. **文件上传/下载**:支持大文件和多文件上传及下载功能。 5. **缓存策略**:支持304缓存,优化数据加载速度。 6. **重定向处理**:能够处理302/303重定向,并支持通过代理进行请求。 7. **简单高效**:API简洁,使用方便,性能高效,且体积小巧(仅154k)。 对比OkHttp,NoHttp与之有以下不同: - OkHttp是跨平台的,既适用于Java,也适用于Android,但随着Android 6.0移除HttpClient,OkHttp成为了主要的网络请求库。 - OkHttp基于socket层,需要开发者手动处理子线程请求和主线程更新UI,以及各种网络参数的封装。 - 而NoHttp是专为Android定制的,它在OkHttp的基础上进行了封装,简化了网络请求的操作,可以直接在主线程发起请求并更新UI。 NoHttp的工作流程大致如下: 1. **主线程发起请求**:所有请求从主线程开始,添加到RequestQueue中。 2. **请求队列处理**:RequestQueue启动子线程,由RequestDispatcher分发请求。 3. **网络操作**:RequestDispatcher按顺序执行网络操作。 4. **结果回调**:RequestDispatcher获取结果后,通过Handler将结果发送回主线程进行UI更新。 NoHttp的API使用中,创建RequestQueue是关键步骤。NoHttp提供了多种创建RequestQueue的方法,但最终都会调用构造函数,传入IRestParser(响应解析器)和threadPoolSize(线程池大小)。RequestQueue内部包含两个阻塞队列,分别用于保存未完成和未执行的请求。start()方法启动线程池,每个RequestDispatcher负责轮询请求队列并执行网络任务。当向RequestQueue添加请求时,如果队列未满,请求会立即执行;否则,请求会被放入队列,等待前面的请求执行完毕。 通过以上分析,我们可以看出NoHttp的设计思路是将复杂的网络操作封装起来,让开发者更专注于业务逻辑,而不是底层网络实现,从而提高了开发效率和代码可读性。在实际项目中,合理利用NoHttp的特性,能够有效地处理各种网络请求,提升用户体验。