You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

弱网下服务被杀时Retrofit KotlinExtensions非致命报错咨询

解答
  • 这类非致命报错属于完全正常的预期内现象,和你观测到的上报时间与系统杀后台时间吻合的特征完全匹配。
  • 先解释下这个堆栈的本质:你看到的KotlinExtensions.kt line 53 retrofit2.KotlinExtensions$await$2$2.onResponse是Retrofit对Kotlin协程扩展函数await()的内置回调实现,所有走await()的请求发生错误时都会先落到这个回调节点,它本身不是根因,只是异常抛出的统一入口。
  • 触发这类上报的核心原因分两类:
    • 占比最高的就是你提到的系统静默杀后台场景:系统回收后台进程时,会直接中断进程内所有正在执行的网络连接、取消所有运行中的协程任务,OkHttp/Retrofit会把这类中断包装成异常抛到这个回调入口。
    • 剩下的部分来自你提到的弱网环境:请求超时、连接闪断、网络切换等常规网络异常,同样会走到这个回调分支。
  • 就算你把网络延迟、网络可靠性相关的异常逻辑全部处理完善,也无法完全消除这类上报,需要做两层处理过滤无效告警:
    1. 业务代码层兜底:所有Retrofit协程请求的catch逻辑,不要只覆盖网络相关的IOException、SocketTimeoutException,必须额外catch CancellationException——协程作用域被取消(包括服务被销毁、系统杀进程前回收资源、主动取消请求)抛出的就是这类异常,属于正常流程终止,不需要做错误上报。
    2. 上报规则层过滤:在Crashlytics中配置自定义拦截规则,对异常链路做判断:如果异常根因是协程取消异常、或者后台状态下触发的连接中断异常,直接拦截不上报,避免这类无意义的非致命告警干扰正常问题排查。
  • 额外提一句适配建议:你做的每秒一次高频位置上报属于后台高耗电任务,就算做完所有厂商ROM省电适配、Doze模式适配,也不可能做到100%进程常驻,不用在后台存活上钻牛角尖,重点做好本地位置缓存、服务重启后的批量补报逻辑,保证数据不丢即可。

内容的提问来源于stack exchange,提问作者Toucouleur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:27:23