Android OkHttp 框架超时设置详解

OkHttp 提供了四种不同的超时设置,每种针对网络请求的不同阶段:

1. callTimeout (调用超时)

  • 作用:控制整个调用从开始到结束的总时间,包括所有重定向和重试

  • 默认值:0 (不超时)

  • 场景:当你希望限制整个请求的完成时间,无论中间经过多少次重定向或重试

  • 设置方法:

    OkHttpClient client = new OkHttpClient.Builder() .callTimeout(30, TimeUnit.SECONDS) .build(); //这里设置为0,则永不超时

注:在弱网情况下,博主遇到还没下载完就判断为超时,导致下载失败,这时候需要设置callTimeout时间,可以修复问题

2. connectTimeout (连接超时)

  • 作用:控制与目标服务器建立连接的时间

  • 默认值:10秒

  • 场景:当服务器响应慢或网络状况差时,防止长时间等待连接建立

  • 设置方法:

    OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .build();

3. readTimeout (读取超时)

  • 作用:控制从服务器读取数据的间隔时间(两次数据包之间的时间)

  • 默认值:10秒

  • 场景:防止服务器响应慢或传输大文件时连接被长时间占用

  • 设置方法:

    OkHttpClient client = new OkHttpClient.Builder() .readTimeout(30, TimeUnit.SECONDS) .build();

4. writeTimeout (写入超时)

  • 作用:控制向服务器发送数据的间隔时间(两次数据包之间的时间)

  • 默认值:10秒

  • 场景:防止上传大文件时由于网络状况差导致长时间占用连接

  • 设置方法:

    OkHttpClient client = new OkHttpClient.Builder() .writeTimeout(30, TimeUnit.SECONDS) .build();

超时设置建议

  1. 根据网络环境调整:移动网络下建议设置较长的超时时间

  2. 根据请求类型调整:上传/下载大文件时需要增加读写超时

  3. 优先级关系:callTimeout > connectTimeout + readTimeout + writeTimeout

  4. 特殊需求:对于关键请求可以设置较短的callTimeout,确保快速失败

示例配置

复制代码
OkHttpClient client = new OkHttpClient.Builder()
    .callTimeout(60, TimeUnit.SECONDS)    // 总超时60秒
    .connectTimeout(15, TimeUnit.SECONDS) // 连接超时15秒
    .readTimeout(30, TimeUnit.SECONDS)    // 读取超时30秒
    .writeTimeout(30, TimeUnit.SECONDS)   // 写入超时30秒
    .build();

这些超时设置可以帮助你更好地控制网络请求行为,避免因网络问题导致应用无响应。

相关推荐
墨天梦7 小时前
B17_LifecycleLiveData与Flow
android·kotlin
_祝你今天愉快8 小时前
UI核心 - 绘制流程(测量、布局、绘制)
android
冬奇Lab9 小时前
LLM 驱动的自动化测试系列(07):移动端自动化(三)——Mobile-Agent-v3 与自研 GUI-Owl 模型路线
android·人工智能·测试
leobertlan13 小时前
痛苦系列 | DSP-02 频域切片:DTFT与DFT的探索
android·后端
leobertlan14 小时前
痛苦系列 | DSP-01 从连续到离散:DSP基础与采样
android·后端
事圆则缓16 小时前
Android 视频压缩上传实战:从 content Uri、转码到断点续传
android
冉冉同学19 小时前
AI Agent 开始操作真实手机:移动端自动化的 3 个新考点
android·ai编程
帅得不敢出门19 小时前
Android Framework关闭软件低电关机功能测试PMIC低电保护
android
恋猫de小郭20 小时前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
墨天梦20 小时前
B15_HTTP解析与OkHttp拦截器
网络协议·http·okhttp