Administrator
发布于 2026-08-25 / 16 阅读
0
0

系列文章《Android 工程师的 100 篇进阶笔记》第 27 篇:Android 网络优化:连接复用、缓存与弱网适配

网络请求是 App 耗电和流量的主要来源之一。同样的接口,优化前后可能差几倍。今天聊一些工程上立竿见影的做法。


一、连接复用:HTTP/2 和连接池

val client = OkHttpClient.Builder()
    .protocols(listOf(Protocol.HTTP_2, Protocol.HTTP_1_1))
    .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES))
    .build()

HTTP/2 支持多路复用,一个 TCP 连接上可以并发多个请求。服务器如果支持,尽量开启。


二、请求合并与批量

  1. 合并接口:把多个小接口合成一个

  2. 批量拉取:列表用分页,不要一次拉全量

  3. 去重请求:同一个接口并发调用时只发一次

// 用相同的 Call 对象,OkHttp 默认会复用连接

三、缓存策略

val cache = Cache(context.cacheDir, 50L * 1024 * 1024)
val client = OkHttpClient.Builder()
    .cache(cache)
    .addInterceptor(cacheInterceptor)
    .build()

合理设置 Cache-Control:

  • 不变数据:设置较长 max-age

  • 敏感数据:不缓存

  • 列表数据:用 ETag/Last-Modified 做协商缓存


四、弱网适配

val request = chain.request()
if (!isNetworkAvailable()) {
    request.newBuilder()
        .header("Cache-Control", "public, only-if-cached, max-stale=86400")
        .build()
}

弱网策略:

  • 超时重试:连接超时、读取超时分开设

  • 降级策略:弱网时切换低清图片、减少预加载

  • 请求优先级:关键请求优先,非关键请求延后


五、监控网络质量

  1. 记录每个接口的耗时、成功率

  2. 按网络类型分类统计(WiFi/4G/5G)

  3. 发现慢接口和失败率高的接口

  4. 用 APM 或自定义拦截器实现


小结

  1. HTTP/2 和连接池能显著提升连接效率

  2. 合并接口、批量拉取、去重能减少请求数

  3. 合理缓存能降低重复请求

  4. 弱网适配需要超时、降级、优先级策略

下一篇,我们看看电量优化:Doze、Standby 与后台限制。


参考阅读

引用链接

[1]OkHttp 缓存文档: https://square.github.io/okhttp/features/caching/

[2]Network monitoring: https://developer.android.com/topic/performance/power/network


评论