JSBridge流程代码理解

JSBridge理解:

两个容器:

  • native端记录一个messageHandlers,键值对为方法名和接口回调,用于注册方法;
  • native端记录一个responseCallbacks,键值对为发送id和接口回调,用于发送方法;

注册发送流程:

  • 当发送时,通过loadUrl把指定方法按照指定格式发到h5,同时记录id和接口回调;
  • h5响应后,调用对应方法;开始构造返回结果消息,将消息放到队列中;
  • h5变更frame.src来触发native的shouldOverrideUrlLoading,在这里记录下fetchQueue方法名和对应的接口回调;
  • native再次loadUrl方法fetchQueue,在h5中把消息队列扁平化json,然后清空,把json再次通过frame.src来发送到native;
  • 将扁平化的json转化为消息列表,然后再根据响应id来找对应的方法;
  • 存在响应id则是在发送方法容器中根据id找到接口回调,执行后移除;
  • 不存在响应id,则是在注册消息容器中查找,找到后执行接口方法,需要回应的则再次走发送方法。

为什么frame.src要变更两次,多走一次从js到native再到js再到native才返回数据,这中间涉及到的fetchQueue的目的是干什么的?

如果是一个方法就是一次回调,可能会通信频率超级高;所以通过消息队列的方式,这么来回走一次的间隔,然后把中间积累的消息统一发出去,这样通过减少发生次数来降低通信频率。

参考:

NATIVE JSBRIDGE源码解析 深入理解JSBRIDGE

Android JsBridge 原理解析

android js交互_混合开发之JavaScriptInterfaceAndroid端交互


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容