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

React Native中重复访问Blob内容URI偶现“Blob not found”异常的排查求助

React Native中重复访问Blob内容URI偶现“Blob not found”异常的排查求助

大家好,我们团队在基于React Native 0.75.2开发的项目中,遇到了一个关于Blob内容URI的偶现问题,折腾了两周还没找到根因,想向各位大佬求助排查思路。

我们的Blob处理流程

我们的应用里所有附件都通过Blob/内容URI管理,不直接使用外部URL,具体流程是:

  • 用XMLHttpRequest从后端获取二进制文件
  • 拿到完整二进制数据后,调用URL.createObjectURL生成内容URI(示例:content://com.gaia.blob/d7809c88-a0e7-4fe6-b049-68d9154d8794?offset=0&size=59301)
  • 将这个URI传给展示组件(比如RN的Image组件)

这套流程在Web版(React框架)里运行完全正常,我们还会在确定不再需要Blob时调用revokeObjectURL释放资源,但RN不支持这个API,所以RN端没做资源释放操作。

问题现象

首次将内容URI传给组件展示时完全没问题,但后续在某些场景下再次访问这个URI(比如执行下载、分享、用系统应用打开等操作),偶尔会抛出以下异常:

[13:22:21.245Z][Console] [java.io.FileNotFoundException: Cannot open content://com.gaia.blob/d7809c88-a0e7-4fe6-b049-68d9154d8794?offset=0&size=59301, blob not found.] 

最棘手的是这个问题无法稳定复现:有时候用户打开并关闭底部弹窗后,重复操作2-3次才会触发;有时候第一次操作就失败;切换页面再返回操作也可能触发,完全找不到明确的触发规律。

已做的排查工作

  1. 查看RN源码发现,react-native/Libraries/Blob/Blob.js的第135行有个close方法,作用就是回收Blob资源,但我们给这个方法加了日志后,确认整个流程中它从未被调用过。
  2. Logcat里偶尔会出现这条警告,但不确定是否和当前问题相关:
2024-11-19 13:58:32.739 12664-12672 System                  com.gaia                             W  A resource failed to call close. 
  1. 我们猜测可能是Hermes的垃圾回收机制把二进制数据回收了,但目前没有证据支撑这个猜想。

核心疑问

现在我们卡在了排查方向上,想请教大家:

  • 有没有办法验证Hermes是否真的回收了对应的二进制Blob数据?
  • 是否可以调整Hermes的GC行为(比如修改回收时机、资源保留规则等)?

如果需要我们提供特定代码片段,我们可以尝试提取,但由于项目是闭源的,无法提供完整可复现的Demo,非常抱歉。

备注:内容来源于stack exchange,提问作者Artemios Antonio Balbach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:38:03