react native Android App当内存不足或者部分Activity被系统回收之后,重启出现的问题

如果你的项目使用的是react native,比如APP MainActivity运行在后台或者手动kill进程之后,

这里需要注意的是AndroidManifest.xml文件中当前activity的启动模式就很重要了,不同的启动模式就会让上层RN出现不同的问题:
1.如果启动模式是 android:launchMode="standard" 标准启动模式,当应用重启时,那么会重新生成新的MainActivity,同时由于项目中react native 的入口是由MainActivity进入的,所以也会导致
react native的路由栈重新生成,之前页面仍可能存在,而且不会走生命周期中的销毁事件componentWillUnmount。假设此时当前页面PageB持有原生的一个异步Promise回调,而这个方法又是使用一个service,是不是就会出现意想不到的情况;
这时你可能会想,我用this.props.navigation.isFocused()方法来判断当前页面是否处于聚焦状态不就可以解决了?
不好意思,你可以去尝试,如果已经重新生成了新的路由栈, 而且当前我们在PageA,不在那个PageB,但是PageB的异步Then方法中用this.props.navigation.isFocused()来拦截,可以打印一下,你会发现返回的是true。。。拦不住。。


2.如果启动模式是 android:launchMode="singleTask"栈内复用模式,当应用重启时,如果当前Activity存在于栈中,则直接复用,它上面的Activity会销毁。Activity的onSaveInstanceState
去保存一些必要的值这个就不多说了。这种模式下,react native的页面就不会销毁,也不会重置路由,自然也不会出现一些上述可能出现的情况(之前项目一直都是singleTask模式,某一天被同事修改成了标准模式,我...)。

已启动的app,运行 如下代码:
adb shell am start -n 包(package)名/包名.活动(activity)名称    例如:

adb shell am start -n com.xxx.music/com.xxx.music.MainActivity
即可验证一下你的项目中,MainActivity不同启动模式导致的react native页面出现的一些问题。

 

个人遇到的一个问题,仅此记录一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值