在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  Android/ 在已有Android App中集成ReactNative調(diào)用Android模塊調(diào)

在已有Android App中集成ReactNative調(diào)用Android模塊調(diào)不到的問題

我想在已有的App中調(diào)用Android模塊,比如Toast,
NativeModules.ToastExample.show(..);

但是一直紅屏報錯,我console.log發(fā)現(xiàn)ToastExample是undefined。多發(fā)查找,發(fā)現(xiàn)下面的App.java中,-------xxx--2---->和-------xxx--3---->直到紅屏始終都沒有打印,也就是說getReactNativeHost沒有被RN調(diào)用。為什么呢??很愁人

圖片描述

回答
編輯回答
尐懶貓

今天上午我稍微看了一下源碼,發(fā)現(xiàn)調(diào)用getReactNativeHost的地方是ReactActivityDelegate.java(ReactNativeHostDelegate-> onCreate會調(diào)用getReactNativeHost().getReactInstanceManager()),只有ReactActivity執(zhí)行生命周期才會調(diào)用到的。

所以我疑惑了,這個跟Application有關(guān)系嗎。我查看了下非集成到app能正常調(diào)用的工程的調(diào)用到的方法棧:
方法stack

很清晰,測試用的App之所以能調(diào)用到getReactNativeHost,是因為ReactActivity的生命周期調(diào)用了ReactActivityDelegate。

那么我發(fā)現(xiàn)我集成的App里,根本沒有一個繼承ReactActivity的類。進(jìn)而我才發(fā)現(xiàn),編寫Native Modules和Integration with Existing Apps的調(diào)用原生Module的方法是不一樣的,后者完全不需要在Application里提供getReactNativeHost來注冊package,只需要在相應(yīng)的交互入口的Activity里注冊你的Package就行了!也就是這樣,在后面再add一個你自己寫的package,這樣就注冊成功了。只能說,getReactNativeHost和這種是兩種不同的注冊本地模塊的方法。
addPackage

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

2018年5月17日 03:40