集成进现有Android原生应用的React Native使用react-navigation跳转异常
问题解决步骤
1. 修正ReactNativeActivity启动模式配置
该现象90%以上是原生AndroidManifest里对ReactNativeActivity的启动模式配置错误导致的,错误配置singleInstance/singleTask启动模式时,RN内部的页面跳转逻辑会触发Activity栈重置,直接返回到栈底的MainActivity。
请将ReactNativeActivity的启动模式改为singleTop或默认的standard,示例配置:
<activity android:name=".ReactNativeActivity" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize" />
2. 校验ReactNativeActivity实现逻辑
如果没有直接继承RN官方提供的ReactActivity基类,而是完全自定义了承载RN的Activity,请确认:
- 没有在RN页面加载完成的回调中调用
finish()方法关闭当前Activity - 启动
ReactNativeActivity时没有添加FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_NEW_TASK这类会清空Activity栈的标记 - 重写
onNewIntent、onBackPressed等方法时没有错误触发返回MainActivity的逻辑
3. 适配react-navigation的原生栈导航
如果前两项检查都无问题,问题出在使用的createNativeStackNavigator上:原生栈导航默认会为每个RN页面创建独立的原生Activity承载,在集成到现有原生应用的场景下会出现栈管理异常。
可两种方案二选一:
- 临时验证:将
createNativeStackNavigator替换为JS实现的createStackNavigator,如果跳转正常即可确认是原生栈的适配问题 - 保留原生栈:配置所有RN页面使用同一个
ReactNativeActivity承载,禁止自动创建新的Activity
4. 排查全局事件拦截
排查原生项目中是否存在全局的触摸事件监听、路由拦截逻辑,误将RN内部的跳转事件识别为返回MainActivity的操作。
内容的提问来源于stack exchange,提问作者Mark Rabey
相关产品推荐
相关产品推荐

