从启动过程讲述普元Mobile 8.0基座( 二 )
同时start方法里开辟了一个基于JSThread线程并且开启了线程的runloop(一直存在 , 不被内存回收) , 这个线程就是提供给JS调用OC用的 。
接着initModulesWithDispatchGroup遍历module除了内部module , 另外一部分普元Mobile8.0自己创建的很多接口类以及类中提供的非常丰富的API可供调用 。
本文插图
利用react提供的宏定义RCT_EXPORT_MODULE注册:
RCT_EXPORT_MODULE(SecurityBridgeModule) 。
宏定义中重写了当前class的+load方法 , 所以module类被加载的时候RCTRegisterModule就调用被注册到配置表 。
本文插图
本文插图
这也是如果前端使用没有被注册的module类名会爆、报红的原因即配置表里找不到这个类 。 JS也有自己的bridge , 两个bridge用的配置表是一样的 。 无论是哪一方调用另一方的方法 , 实际上传递的数据只有 ModuleId、MethodId 和 Arguments, 分别对应的是类名、方法名、参数 。
利用runtime就可以使用传递的三个参数完成接口的调用过程;OC调JS某些模块的方法时 , 也是通过传递ModuleID和MethodID去调用的 , 都会走到-enqueueJSCall:args:方法把两个ID和参数传给JS的BatchedBridge.callFunctionReturnFlushedQueue , 跟JS调OC原理差不多 。
感兴趣的话可以研究下面的流程:
本文插图
3.组件的集成
普元Mobile8.0 提供了一个组件集成的助手类PluginHelper , 利用pod 'PluginHelper',:podspec =>”仓库最新地址”即可集成 。 此类主要作用是在应用启动时调用([PluginHelper didFinishLaunchingWithOptions:launchOptions];) , 会遍历components.json中需要集成的组件类 , 并向这些组件类发消息完成初始化 。 目前提供的协议接口除了初始化组件的方法还有推送和支付相关方法 。
本文插图
【从启动过程讲述普元Mobile 8.0基座】
组件类需要遵守协议实现协议方法 , 遍历拿到类名后利用runtime向此类发消息和对应的协议function名 。
本文插图
利用PluginHelper可以解除每引用一个新组件时要import对应类的头文件步骤 。 只需要在应用启动方法didFinishLaunchingWithOptions手动调用初始化方法 。 降低了主结构代码冗余度避免了代码耦合 , 使组件代码更独立有利于整个项目的组件模块化进程 。
以普元Mobile8.0平台推送组件举例 , 集成组件后 , 只需在以下几个方法调用PluginHelper即可 。 所有的消息处理代码都在推送组件里 , 增强了主项目代码的可读性 。 不用考虑复杂的iOS推送接收获取过程 。 不仅如此 , 推送组件还提供了获取推送消息 , 获取设备Token注册Token , 设备绑定等等相关的RN接口非常方便调用 。
本文插图
普通处理方法要考虑冗余的推送逻辑和接口:
本文插图
4.模块化
程序员都知道的最基本的代码设计原则:“Don’t repeat yourself!” 。 架构的重要体现就是能够更好的共享资源同时避免代码和功能的复用 , 而架构恰恰就是围绕模块化做的 。
推荐阅读
- 特别节目《海报里的英雄》将播 总导演谈创作过程
- 平乡|镇干部婚内出轨并家暴妻子意外死亡?官方启动调查是否存出轨
- 北京将启动地方资产公司等四行业现场检查,财务及风险情况系重点
- 成员|《极限挑战宝藏行》致敬胡杨精神,99岁护林员讲述护林故事
- 博科园 攻克光无线通信:在手机和其他设备传输信息过程的难题!,太好了
- 风月无关|游戏设计过程就考虑到反作弊,《Valorant》开发者演讲
- 妻子|河北一干部疑出轨并在妻子意外离世后失联,警方启动重新鉴定程序
- 平乡县|河北平乡回应干部疑出轨并在妻子死后失联:警方启动重新鉴定程序
- 央视新闻客户端|国家防总启动防汛防台风Ⅳ级应急响应,“森拉克”“黑格比”相继生成
- 「官方通报干部疑出轨在妻死后失联」官方通报干部疑出轨在妻死后失联:启动调查
