Android开源框架如何说-Volley
2018-08-23 本文已影响0人
MigrationUK
- 概念
- Goole 发布的网络通信库,使网络通信更快、更简单、更健壮。
- 关键词:数据不大但通信频繁
- 功能:
- Json,图像等异步下载
- 网络请求的排序(scheduling)
- 网络请求的优先级处理
- 和 Activity 的生命周期联动(Activity 结束时同时取消所有网络请求)
- 优点:
- 非常适合进行数据量不大,但通信频繁的网络操作
- 可直接在主线程调用服务端并处理返回结果
- 可以取消请求,容易扩展,面向接口编程
- 网络请求线程NetworkDispatcher默认开启了4个,可以优化,通过手机CPU数量
- 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
- 缺点:
- 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar
- 对大文件下载 Volley的表现非常糟糕(多个线程同时内存占用就很高,很容易oom)
- 只支持http请求
- 流程结构
- Volley 运行的过程中一共有三种线程,包括 UI 线程、Cache 调度线程和 NetWork 调度线程池
- Volley 的入口是创建一个RequestQueue 队列,然后开启一个缓存线程和一组网络线程,等待用户 add 新的 request(请求可使用默认的也自定义)
- Request根据优先级加入RequestQueue,然后判断是否加入Cache,加入对应的网络、缓存的阻塞队列(线程安全)
- 请求加入优先级队列,Cache 线程进行筛选,如果命中(hit)分发给 UI 线程
- CacheDispacher,从缓存阻塞队列拿一个request,去缓存里面进行缓存调度查找匹配,如果命中返回
- 未命中(miss)交给 NetWork 调度线程池处理
- NetworkDispacher,从网络阻塞队列拿一个request,执行根据传入的选择HttpUrlConnection或者HttpClient进行网络请求,根据返回状态码是否进行缓存
- 取回后更新 Cache 并分发给 UI 线程,每次请求执行过程始于 UI 线程, 终于 UI 线程
- ExcutorDelivery将Response 使用Handler机制Post到主线程,然后回调到开始开发者创建的mRequest对象上
- Volley 运行的过程中一共有三种线程,包括 UI 线程、Cache 调度线程和 NetWork 调度线程池