Android应用Retrofit API在WiFi下加载超时,移动数据正常求助
问题排查与解决方案
办公WiFi代理/流量限制
办公网络大概率存在代理设置或域名限流,其他应用可能自动适配了代理,但Retrofit默认没配置。你可以手动给OkHttpClient添加代理配置:val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("你的办公代理地址", 代理端口)) val okHttpClient = OkHttpClient.Builder() .proxy(proxy) .build() // 把这个client传给Retrofit实例同时用命令行测试API域名的连通性,确认是否被屏蔽:
ping your-api-domain.com traceroute your-api-domain.comDNS解析异常
办公WiFi的DNS服务器可能对API域名解析慢或者返回异常IP。可以给Retrofit配置自定义DNS,优先选择可快速访问的IP:val customDns = Dns { hostname -> val addresses = InetAddress.getAllByName(hostname) addresses.sortedBy { it.isReachable(1000) } // 筛选1秒内可连通的IP } val okHttpClient = OkHttpClient.Builder() .dns(customDns) .build()TCP连接复用失效
办公网络可能限制长连接,导致每次请求都要重新建立TCP连接,拖慢速度。调整OkHttpClient的连接池参数,优化连接复用:val connectionPool = ConnectionPool( maxIdleConnections = 5, keepAliveDuration = 5, timeUnit = TimeUnit.MINUTES ) val okHttpClient = OkHttpClient.Builder() .connectionPool(connectionPool) .build()超时配置过短
检查当前Retrofit的超时设置,办公网络波动大,默认超时可能不够,适当延长:val okHttpClient = OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build()API服务器端限流
联系后端团队,检查服务器是否对办公WiFi的公网IP段做了带宽限流或请求频率限制,查看访问日志确认是否有被拦截的请求。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

