如何在MainActivity的onCreate函数中获取当前的ReactContext?

Val*_*eri 2 android react-native react-native-android

我需要MainActivity通过以下方式在onCreate函数中调用本机模块:context.getNativeModule(RNBackgroundToForegroundServiceModule.class)

但是我不确定如何获得当前的电流ReactContext

我尝试使用(ReactContext) getApplicationContext()但崩溃了。

我如何获得有效证明ReactContext

Val*_*eri 7

我自己想出了正确的答案。
我们必须等到Javascript捆绑包加载完毕。

ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager();
        ReactApplicationContext context = (ReactApplicationContext) mReactInstanceManager.getCurrentReactContext();
        mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
            public void onReactContextInitialized(ReactContext validContext) {
                // Use validContext here
               
            }
        });
Run Code Online (Sandbox Code Playgroud)


Hed*_*deH 5

在您的ReactActivity中使用它:

getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
Run Code Online (Sandbox Code Playgroud)

只需确保在Application类中实现了ReactApplication

重要信息:
因为有UI线程和JS线程,所以ReactContext可用需要一些时间,因此在“ onCreate”中,您可以使用延迟为1秒的Handler,例如ReactContext应该可用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            ReactContext reactContext = getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
        }
    }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

但是我建议您从ReactContextBaseJavaModule进行操作,在创建时提供上下文...