当前位置: 首页 > news >正文

解决新版RN 热更新报错:recreateReactContextInBackground

一、报错描述

React-native 集成 react-native-code-push 报错

java.lang.AssertionError: recreateReactContextInBackground should only be called after the initial createReactContextInBackground call.

在这里插入图片描述

二、原因分析

这是因为你使用了 rn 版本(0.76~到最新的0.79.3),此版本默认启用了TurboModules 新架构,新架构存在 bug:在安卓上无法清除rn内存中的上下文缓存,也就是说不支持实时热更新,除非应用杀死内存重启否则 rn 永远使用旧的不会变。

三、解决方案

1、关闭新架构

修改android 根目录下gradle.properties文件,将此字段置为 false:

newArchEnabled=false

备注:只改动上面配置即可,SoLoader.init(this, OpenSourceMergedSoMapping)不要改

2、启用新架构

只能做到下次启动 app更新

备注:TurboModules新架构决定了此特性,如果你有清理TurboModules 缓存的方法也请同步我下。

需修改代码如下(修改npm源码神器patch-package):

1、CodePush.java这里写死防止回滚

boolean updateIsLoading = pendingUpdate.getBoolean(CodePushConstants.PENDING_UPDATE_IS_LOADING_KEY);
// 如果启用newArchEnabled:此行写死避免代码回滚
updateIsLoading = false;

在这里插入图片描述
2、CodePushNativeModule.java注释掉重新创建上下文方法,防止报错退出 App

instanceManager.recreateReactContextInBackground();

在这里插入图片描述

相关文章:

  • 基于sample_aiisp例子,创建3路编码流,记录
  • 【微软RDP协议】微软RDP协议技术架构特点与跨地域应用实践
  • 【 java 虚拟机知识 第二篇 】
  • android 之 CALL
  • 使用adb 抓取perfetto-trace的注意事项
  • 基于 Redis 的幂等性设计:SpringBoot @Async 在高并发 MySQL 日志存储中的应用
  • Mac 系统 Node.js 安装与版本管理指南
  • RAG检索前处理
  • GO后端开发内存管理及参考答案
  • adb 查看android 设备的硬盘及存储空间
  • 录制mp4 rospy
  • 2025年中国人工智能发展研究报告:技术突破、行业变革与全球竞争新格局
  • Spring 路由匹配机制详解:时间复杂度从 O(n) 降至 O(log n)
  • 学习STC51单片机36(芯片为STC89C52RCRC)智能小车3(PWM差速小车)
  • Redis 安装实践:基于鲲鹏 ARM 架构 Ubuntu 环境
  • 随记:sw2urdf插件导出urdf模型在ROS2-rviz2显示
  • 电流传感器在工业自动化中的应用
  • Tess4J:基于 Java 的 OCR 解决方案
  • 【doris】doris集成ranger控制权限,ranger配置无法存储doris密码password信息
  • 代码随想录训练营第三十天 | 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
  • 网站服务做推广/2024近期新闻
  • 自己做的网站涉黄/外贸网络推广营销
  • 做的新网站网上搜不到/互联网营销工具
  • 做网站 珠海/网站推广系统
  • 做网站文字大小/合肥百度搜索排名优化
  • 网站开发需要了解的知识/it培训学校