我想在已有的App中调用Android模块,比如Toast,NativeModules.ToastExample.show(..);
但是一直红屏报错,我console.log发现ToastExample是undefined。多发查找,发现下面的App.java中,-------xxx--2---->和-------xxx--3---->直到红屏始终都没有打印,也就是说getReactNativeHost没有被RN调用。为什么呢??很愁人
我想在已有的App中调用Android模块,比如Toast,NativeModules.ToastExample.show(..);
但是一直红屏报错,我console.log发现ToastExample是undefined。多发查找,发现下面的App.java中,-------xxx--2---->和-------xxx--3---->直到红屏始终都没有打印,也就是说getReactNativeHost没有被RN调用。为什么呢??很愁人
1 回答1.6k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
2 回答2.6k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
今天上午我稍微看了一下源码,发现调用getReactNativeHost的地方是ReactActivityDelegate.java(ReactNativeHostDelegate-> onCreate会调用getReactNativeHost().getReactInstanceManager()),只有ReactActivity执行生命周期才会调用到的。
所以我疑惑了,这个跟Application有关系吗。我查看了下非集成到app能正常调用的工程的调用到的方法栈:

很清晰,测试用的App之所以能调用到getReactNativeHost,是因为ReactActivity的生命周期调用了ReactActivityDelegate。
那么我发现我集成的App里,根本没有一个继承ReactActivity的类。进而我才发现,编写Native Modules和Integration with Existing Apps的调用原生Module的方法是不一样的,后者完全不需要在Application里提供getReactNativeHost来注册package,只需要在相应的交互入口的Activity里注册你的Package就行了!也就是这样,在后面再add一个你自己写的package,这样就注册成功了。只能说,getReactNativeHost和这种是两种不同的注册本地模块的方法。

https://www.jianshu.com/p/5cf...