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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang___yong/article/details/82705704

一个原生的项目要求嵌入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的生命周期有关系。

猜你喜欢

转载自blog.csdn.net/zhang___yong/article/details/82705704