react native安卓调试(摇一摇和菜单键无效)

在原生项目中嵌入React Native界面时,发现无法通过摇一摇或长按Menu键进行调试。经过排查,设置ReactInstanceManager.setUseDeveloperSupport(true)并调用showDevOptionsDialog无效。解决办法是确保在Builder实例化时调用setCurrentActivity(this),并且监听菜单键。进一步优化,通过manager.onHostResume与Activity的生命周期绑定,实现调试功能的同时避免重复实例化,提高页面显示速度。最终,发现摇一摇功能与ReactInstanceManager的生命周期有关。

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

一个原生的项目要求嵌入react native界面,于是我把打包好的bundle放到assets文件夹下本地加载,运行没问题,但是没办法调试,摇一摇和长按Menu键都不行。

检查代码,主配置文件中注册了

        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

实例化ReactInsyanceManager的时候也setUseDeveloperSupport(true)了。

 

进到setUseDeveloperSupport这个方法看一看:

/**
   * When {@code true}, developer options such as JS reloading and debugging are enabled.
   * Note you still have to call {@link #showDevOptionsDialog} to show the dev menu,
   * e.g. when the device Menu button is pressed.
   */
  public ReactInstanceManagerBuilder setUseDeveloperSupport(boolean useDeveloperSupport) {
    mUseDeveloperSupport = useDeveloperSupport;
    return this;
  }

注释里说了,参数为true时可以debug。然后还需要调用showDevOptionsDialog。

好的,调用这个唤起debug菜单的showDevOptionsDialog方法,依然没反应。上网找答案,原来实例化ReactInsyanceManager的时候还需要setCurrentActivity(this)。

 

所以,最终方案:

1.ReactInsyanceManager使用Builder实例化时setCurrentActivity(this).

2.监听菜单键:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU){
            openDevDialog();
        }else {
            return super.onKeyDown(keyCode, event);
        }
        return true;
    }

    private void openDevDialog() {
        manager.showDevOptionsDialog();
    }

如此操作后当前activity就可以长按菜单键唤出debug菜单了,不过别的activity还需要相同的操作才能支持debug。

 

优化:

在一个项目里有时不止一个RN界面,按照上面的方案想要调试所有界面的话每个界面都需要实例化一个ReactInsyanceManager,这样造成了浪费,降低了页面显示的速度。还好RN官方是有方案的,manager.onHostResume即可设置currentActivity。这样我们就可以复用一个ReactInsyanceManager实例,只需要每个页面调用一次onHostResume就可以了

 

emmm ,我发现aty和manager绑定生命周期之后就可以摇一摇了。。。。。。看来这个摇一摇注册和manager的生命周期有关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值