菜鸟学习React Native for Android 之通讯原理分析(JAVA调用JS
发布时间:2020-12-15 08:19:53 所属栏目:百科 来源:网络整理
导读:主要参考自:React Native通讯原理:http://www.jianshu.com/p/17d6f6c57a5c 1.通讯框架图 2.Native调用JS Native调用JS流程分析: MessageQueue把Native调用的方法放到JavaScriptCore中 JS Module把可以调用的方法放到MessageQueue的一个对列中 Native从Jav
主要参考自:React Native通讯原理:http://www.jianshu.com/p/17d6f6c57a5c 1.通讯框架图
2.Native调用JS Native调用JS流程分析:
个人结合源码分析理解: CatalystInstanceImpl包含了JavaScriptModuleRegistry,后者包含了JS模块在JAVA中对应的接口,例如index.android.js中有这么一段 import {
AppRegistry,StyleSheet,Text,View
} from 'react-native';
在 CatalystInstanceImpl实例化的时候, JavaScriptModuleRegistry中就已经被放入了相关接口的class原型(点击我看看如何被存放的)AppRegistry这个模块在JAVA中有对应的JAVA接口package com.facebook.react.uimanager; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.WritableMap; /** * JS module interface - main entry point for launching React application for a given key. */ public interface AppRegistry extends JavaScriptModule { void runApplication(String appKey,WritableMap appParameters); void unmountApplicationComponentAtRootTag(int rootNodeTag); void startHeadlessTask(int taskId,String taskKey,WritableMap data); } 那么getJSModule是干什么的呢,其实他是生成JS在JAVA中的接口的动态代理,我们知道,动态代理是实现了接口的方法的,而在每个方法其实是调用
JavaScriptModuleInvocationHandler中的invoke方式,传入接口的方法名和参数,之所以通过动态代理,我们的目的就是把接口的方式和参数传到JS那边,另外这个动态代理 也以便于JAVA端对象。从这里我们可以看到Cataly的含义是催化剂,催化什么呢,现在看来,就是催化我们的JS中JAVA的接口转化为实例。 JAVAScriptModuleInvocationHandler有一个Cataly实例,invoke其实是调用了Cataly实例的callFunction,而callFunction里面是一个native方法
private native void callJSCallback(ExecutorToken executorToken,int callbackID,NativeArray arguments); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |