android 网络库部分:Volley、Retrofit、OkHttp、HttpURLConnection的比较、、Cronet
- 对比网址:https://cloud.tencent.com/developer/article/2450505
四、OkHttp 出自Square公司
1. 官网: https://square.github.io/okhttp/
OkHttp同样出自Square公司,是一个高性能的HTTP客户端库。它主要解决了Android平台原生HTTP库的一些性能问题。OkHttp支持 HTTP/2 和 WebSocket 协议,可以作为其他网络库的底层实现。OkHttp 的源码中,可以看到如下特性:
OkHttpClient 类是核心组件,负责创建和管理请求。它使用了连接池(ConnectionPool 类)和请求压缩等技术来提高性能。
Request 类表示一个 HTTP 请求。它包含请求的 URL、方法、头部等信息。
Call 类表示一个请求的执行。它可以执行同步请求(execute 方法)或异步请求(enqueue 方法)。
OkHttp 支持 WebSocket 协议。这是通过 WebSocket 接口和 RealWebSocket 类实现的。可以使用 newWebSocket 方法创建一个 WebSocket 连接。
2. 优点:
- 高性能:OkHttp具有连接池、请求压缩等特性,提高了网络请求的性能。
3. 适用场景:
· 对性能要求较高的网络请求
· 处理大文件下载和上传任务。
· 需要支持HTTP/2或WebSocket协议的应用。
-作为其他网络库(如Retrofit)的底层实现。
三、Volley Google官方推出的
1. Volley是Google官方推出的一个Android网络库,它的主要优点在于对请求的自动调度和优先级处理,以及内存和性能的优化。Volley 的源码中,可以看到如下特性:
Request 类包含一个 priority 属性,用于表示请求的优先级。Volley 会根据优先级对请求进行排序和调度。
RequestQueue 类是 Volley 的核心组件,负责管理和调度请求。它使用一个 PriorityBlockingQueue 来存储请求,并根据请求的优先级进行排序。
NetworkDispatcher 类负责处理请求队列中的请求。它会根据请求的优先级执行请求,并将结果分发给相应的回调函数。
Volley 使用了 LruCache 类作为内存缓存,可以有效减少内存占用。在 ImageLoader 类中,可以看到 Volley 如何处理图片缓存。
2. 优点:
请求优先级处理、内存优化-适用了bitmap的内存缓存、允许自定义请求、
缺点: 不支持大文件、不支持同步
3. 适用场景:
- 轻量级的网络请求,如JSON数据的获取、图片加载等、
- 请求优先级排序
二、Retrofit Square公司推出的
1.
官网: http://square.github.io/retrofit/
github地址: https://github.com/square/retrofit
Simple HTTP with Retrofit2: https://link.jianshu.com/?t=https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/
1.2 Retrofit是Square公司推出的一个类型安全的网络库,它的核心思想是将HTTP API转化为Java接口。Retrofit具有高度可定制性和强大的功能。Retrofit 的源码中,可以看到如下特性:
Retrofit 类是核心组件,负责创建 API 接口的实现。它使用动态代理技术将 HTTP API 转换为 Java 接口。
Call 类表示一个请求,可以执行同步请求(execute 方法)或异步请求(enqueue 方法)。
Callback 类用于处理异步请求的结果。开发者可以实现 onResponse 和 onFailure 方法来处理成功和失败的情况。
Retrofit 支持多种数据解析方式,如 Gson、Moshi 等。这是通过 Converter.Factory 类实现的。开发者可以自定义转换器来处理特定的数据格式。
2. 优点
· 类型安全:Retrofit将HTTP API转化为Java接口,使得开发者可以更安全、更简洁地处理网络请求。
· 高度可定制:Retrofit支持多种数据解析方式,如Gson、Moshi等,同时允许开发者自定义请求处理。
· 支持同步和异步请求:Retrofit既支持同步请求,也支持异步请求,满足不同场景的需求。
· 集成OkHttp:Retrofit默认使用OkHttp作为底层网络库,继承了OkHttp的诸多优点。
· · · 请求的方法参数注解都可以定制、支持同步/异步/和RxJava、超级解耦、可配置不同的HTTP client实现网络请求
3. 适用场景:
定制化、
同步/异步、
RESTful API的请求处理
- 什么是Restful API? https://blog.csdn.net/weixin_51444308/article/details/141247505
唯一的URI资源标识、无状态的-请求独立且服务器不保存客户端状态、且使用标准的HTTP状态码、
表述型:资源可有不同表述形式:JSON/XML/HTML等、
4. retrofit配置和使用:
- https://blog.csdn.net/carson_ho/article/details/73732076
- retrofit常用注解介绍、okhttp、RXjava : https://www.jianshu.com/p/a94e38636fde/
build.gradle:
- compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
5. 相关:RxJava
- RxJava在Android中是一个处理异步操作和事件流的强大库,RxJava是一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库。
- 其基于一种扩展的观察者模式,该模式中有四个关键角色:Observable(被观察者)、Observer(观察者)、subscribe(订阅)以及事件。Observable通过subscribe方法按顺序发送事件给Observer,Observer则按顺序接收事件并作出对应的响应动作。
- 耗时操作、大文件保存等、异步操作:RxJava + Retrofit处理网络请求。定时轮询-后台异步任务/定时进度并更新到UI、
- RxJava还可以用于延时执行、轮播图实现、监听EditText的字符串改动等多种场景。
一. Cronet是一个基于Chromium网络组件的Android网络请求框架,它利用了Google Chrome浏览器的网络堆栈,提供了高效、低延迟的HTTP和TCP/IP通信能力。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
android 图片库部分:Fresco、Picasso、Glide、
四、UniversalImageLoader图片加载库 由俄罗斯开发者Vladimir Sitnikov所开发,项目在2015年停止维护
1. github地址 && 适用配置
https://gitcode.com/gh_mirrors/an/Android-Universal-Image-Loader?utm_source=csdn_github_accelerator&isLogin=1
https://gitcode.com/gh_mirrors/an/Android-Universal-Image-Loader
https://github.com/nostra13/Android-Universal-Image-Loader
2. 优点:
多线程异步加载 支持从网络、本地文件系统、assets目录及drawable资源加载图片36。
灵活配置 可自定义线程池、缓存策略(内存/磁盘)、图片解码方式等36。
缓存机制 支持内存缓存(LRU)、文件系统缓存及SD卡缓存36。
性能优化 根据ImageView尺寸动态裁剪Bitmap,减少内存占用67。
加载控制 支持暂停/恢复加载,适用于ListView、GridView滑动优化
三、Fresco 图片加载库 Fresco 由 Facebook Android 工程师负责开发。
1. AVIF(AV1 Image File Format)格式文件是一种近些年出现的新型格式图像文件规范、AVIF 是一种基于 AV1 视频编码的新一代图像格式 官网:https://cloudconvert.com/avif-converter
avif集成:https://cloud.tencent.com/document/product/436/115610
· 安装 Fresco 和 AVIF SDK
- implementation 'com.qcloud.cos:avif:1.1.0'
implementation 'com.facebook.fresco:fresco:version'
// 如果需要支持 avif 动图解码器 则需要加上 fresco:animated-base 依赖
implementation 'com.facebook.fresco:animated-base:version'
2. Fresco官网:
https://frescolib.org/docs/index.html
github地址:https://github.com/facebook/fresco
3. 配置:
- implementation 'com.facebook.fresco:fresco:3.6.0'
二.二 Coil库 线圈库-适用于 Android 和 Compose Multiplatform 的图片加载库
· 快速:Coil 执行许多优化,包括内存和磁盘缓存、降低图像采样、自动暂停/取消请求等。
· 轻量级:Coil 仅依赖于 Kotlin、Coroutines 和 Okio,并与 Google 的 R8 代码压缩器无缝协作。
· 易于使用:Coil 的 API 利用 Kotlin 的语言功能来实现简单性和最少的样板。
· 现代:Coil 优先使用 Kotlin,可与现代库(包括 Compose、Coroutines、Okio、OkHttp 和 Ktor)互作。
Coil 是以下缩写词:Coroutine Image Loader。
---- 请使用如 Coil 等替代picasso等方案用于未来的项目,并开始规划迁移现有项目,尤其是那些依赖 Compose UI 的项目。
1. 官网 https://coil-kt.github.io/coil/
2. 使用和配置
implementation("io.coil-kt.coil3:coil-compose:3.1.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.1.0")
二、picasso图片加载库 Square 公司还有其它开源库:Retrofit、OkHttp、Picasso
1. github网址: https://github.com/square/picasso 此库已停止更新--最新适用compose的Coil库:
https://coil-kt.github.io/coil/
https://gitcode.com/gh_mirrors/pic/picasso?utm_source=csdn_github_accelerator&isLogin=1
官网:https://square.github.io/picasso/
2. 使用和配置:
implementation 'com.squareup.picasso:picasso:2.8'
3. 优点:
- 系统会自动检测适配器重用,并取消之前的下载
在适配器中处理回收和下载取消。ImageView
• 以最少的内存使用实现复杂的图像转换。
• 自动内存和磁盘缓存
===============================================================================================
一、glide框架 功能/性能 表现突出,由Bump Technologies团队创建,现在由Google推荐并维护/专注于高效处理图像加载、缓存、和生命周期管理.
-特点: GIF支持、缓存策略(多级缓存:内存+磁盘)、生命周期管理-自动绑定、默认图片格式(RGB_565-低内存占用)
-适用场景:列表滑动-平滑加载/避免卡顿、动态内容展示、低内存设备优化(通过RGB_565格式减少内存消耗)
0.核心特性:
- 高效缓存: 内存缓存:避免重复解码,提升加载速度、
磁盘缓存:自动缓存原始图像和调整后的图像、
- 生命周期集成:
自动绑定Activity/Fragment生命周期,在页面销毁时停止请求,避免内存泄漏
- 性能优化:
· 智能奖采样(Downsamping):根据控件尺寸自动调整图片分辨率、减少内存占用
· 资源复用:重用Bitmap和字节数组,降低垃圾回收频率.
1. 基本用法:
- 加载网络图片:Glide.with(context).load(IMAGE_URL).into(imageView);
- 占位符与错误处理:
Glide.with(context).load(IMAGE_URL)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error_image)
.into(imageView);
- 动态内容支持: 可加载GIF和视频缩略图,通过asGif()方法指定格式.
2. 配置与扩展
- 依赖添加: build.gradle中引入:
implementation 'com.github.bumptech.glide:glide:4.12.0'
- 权限设置
网络加载需声明 INTERNET权限/ACCESS_NETWORK_STATE权限、本地存储需READ_EXTERNAL_STAORAGE权限
- 自定义模块
通过实现GlideModule接口,可调整缓存策略、图片格式等、
3. glide样例使用详细
https://blog.csdn.net/qq_35507234/article/details/89419793
官网:https://bumptech.github.io/glide/doc/download-setup.html
- RecyclerView 复杂列表集成库: https://bumptech.github.io/glide/int/recyclerview.html
- 配置: implementation ("com.github.bumptech.glide:recyclerview-integration:4.14.2") {
// Excludes the support library because it's already included by Glide.
transitive = false
}
4. 注解处理器
annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2' - 可选依赖项
- annotationProcessor 用于指定注解处理器 纯java项目显示添加的方式、
-kapt 'com.github.bumptech.glide:compiler:4.14.2' && apply plugin: 'kotlin-kapt'
- glide某个版本开始推荐 应用了 kotlin-kapt 插件的方式进行kotlin项目的glide注解处理器kapt方式.