android 到拨号界面卡死,小记一个ReactNative Android上的设计实现缺陷导致界面卡死的问题...

本文详细记录了在ReactNative Android应用中遇到的一个问题:当从特定业务链条回到主页并重新打开RN页面时,页面卡死。问题源于ReactContext的mCurrentActivity在不正确的时间被置为空,导致桥调用失败。短期解决方案是避免引擎复用的RNActivity连续关闭打开,长期解决方案则是修改ReactContext的onHostDestroy方法,避免在错误情况下清除Activity引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ReactNative使用过程中,我们遇到一个特殊动作下Android端RN页面直接卡死的场景,本文记录该卡死的排查过程与原理分析。

问题现象

假设我有一个RN页A,可以重复打开。我的操作是,root界面,打开A,再打开了其他界面X到Y到Z的业务链条。执行一定操作后,会触发回到root界面即clear top打开root界面,同时再次打开A,来实现快速回到A并刷A。这里不直接clear top到A的原因是,root界面和root界面打开A或者其他MN页面,都可以触发XYZ流程,并且在流程结束后,都期望回到root+A的页面状态,因此XYZ流程结束流程指定为“回到root界面即clear top打开root界面,同时再次打开A”。

假设一开始打开的A叫RN-A,第二次打开的A叫RN-B,那整个路径上页面栈的改变类似于:

attachment.php?fid=217

背景如上,但是这个操作后打开的A,我们这里叫A一撇或者叫B吧,会卡死,页面事件可以响应但是很多桥触发不了,页面也无法返回包括物理返回,js异常也不会触发红屏了。

更离谱的是,一旦我home到桌面再回来,一切就恢复了。

关注到部分桥与调用行为在异常过程中报错“Activity is null!”,即可开始断点代码,发现当前页面ReactContext内的mCurrentActivity为空,取不到Activity。RN里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值