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

使用Retrofit给RecyclerView分页加载图片时onPause抛出RuntimeException

解决Retrofit分页加载图片时onPause抛出的unable to marshal value异常

这个unable to marshal value异常虽然常见,但你说和已有案例成因不同,那咱们从几个容易被忽略的角度排查和解决:

  • 排查数据源的隐藏序列化问题
    虽然你说不是常规的Parcelable实现问题,但大概率还是系统在尝试序列化某个对象时失败了。比如:

    • 你是否在onSaveInstanceState里保存了RecyclerView的完整数据集?如果你的图片模型类里包含了非序列化成员(比如Retrofit的Call实例、未压缩的Bitmap对象、匿名回调接口、第三方库的自定义对象),系统在marshal这些对象时就会抛出异常。
    • 解决思路:如果需要保存状态,只存图片URL、ID这类基础序列化字段,别存Bitmap或网络请求相关对象;如果不需要保存状态,确保onSaveInstanceState里没有尝试保存整个数据集。
  • 处理分页请求的生命周期问题
    当Activity进入onPause时,有没有取消正在进行的Retrofit分页请求?如果请求还在后台跑,回调回来时如果持有Activity的强引用,同时系统正在尝试序列化Activity状态,可能会间接触发这个异常。

    • 解决思路:在onPause方法里遍历所有未完成的Retrofit Call实例,调用cancel()取消请求;改用ViewModel管理分页数据,把数据逻辑和UI生命周期解耦,避免Activity暂停时数据被意外序列化。
  • 检查Adapter或分页库的状态保存逻辑
    如果你用了自定义Adapter或者第三方分页库(比如Paging 3),要确认这些组件内部有没有尝试序列化不能被marshal的对象。比如Adapter里如果持有了Glide/Picasso的加载请求对象,这类对象通常是无法被序列化的。

    • 解决思路:检查Adapter的状态保存代码,只存页码、加载状态这类基础类型;如果用分页库,确认库的配置是否正确,比如Paging 3的RemoteMediator不要持有非序列化对象。
  • 打印完整异常栈定位根源
    你目前只贴了异常的开头,建议把完整的异常栈信息打出来——异常栈里会明确指出是哪个类的对象无法被marshal(比如unable to marshal value com.yourpackage.YourImageModel@xxxx),这样就能精准定位问题。比如如果是Bitmap,就改成只存URL,在需要时再加载;如果是回调接口,就把接口改成弱引用或者从数据源中移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:31