JS调用原生对象的方法、存储介质技术

技术编号:19056218 阅读:32 留言:0更新日期:2018-09-29 12:04
本发明专利技术提供一种JS调用原生对象的方法、存储介质,方法包括:在原生层分别创建一个原生类池、一个原生实例池以及原生中介模块,并将其映射到JS层,分别获取对应的一个JS类池、一个JS实例池以及JS中介模块;在JS层中向JS中介模块发起创建对应一原生模块的实例的请求;JS中介模块发送请求中包含的所述实例的创建参数至原生中介模块;原生中介模块依据所述创建参数在原生实例池中创建对应所述一原生模块的原生实例,并将其映射到JS层的JS实例池中。本发明专利技术能够实现对不同接口请求的并行调用,显著缩短接口请求时间,解决界面卡顿问题,提高用户的体验。

【技术实现步骤摘要】
JS调用原生对象的方法、存储介质
本专利技术涉及应用程序开发领域,具体说的是一种JS调用原生对象的方法、存储介质。
技术介绍
现有技术中,可基于React-native框架开发iOS、Android平台的App。React-Native框架(以下简称框架)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架React在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。框架支持通过JS代码创建一个原生的app。对于框架未封装的平台API,支持开发者按照规则自定义原生模块,再通过JS来调用。简单的说,就是原生提供sdk,JS调用sdk实现功能。目前框架会把原生模块都映射到JS层上一个原生模块池中(框架官方文档使用说明http://facebook.github.io/react-native/docs/native-modules-ios.html),JS层原生模块池中的每个对象都会对应到原生的一个模块。两端是一一对应的关系。框架默认的映射关系如图1所示。这种一对一的模式的缺点就是无法方便的在同一个ReactNative页面处理存在多个相同模块的场景。例如如下情况:场景:一个页面包含轮播图、电影列表,且轮播图、电影列表的数据来源于不同的接口请求。轮播图和电影列表的数据需要通过不同的接口获取,如果只存在一个接口模块,那么需要按顺序调用接口模块(这里的接口模块对应原生定制的接口模块,会对请求的结构及返回的数据进行格式化处理,还会增加一些请求相关的字段、如机型),前一个接口请求返回后再发送后一个接口请求,传入不同的参数获取数据。接口请求需要时间,如果再增加几个不同接口,数据请求的时间就越长,界面卡顿,对用户的体验就不好。因此,有必要提供一种能解决上述问题的JS调用原生对象的方法、存储介质。
技术实现思路
本专利技术所要解决的技术问题是:提供一种JS调用原生对象的方法、存储介质,能够支持通过JS对一个原生模块的多个实例进行并行操作。为了解决上述技术问题,本专利技术采用的技术方案为:一种JS调用原生对象的方法,包括:在原生层分别创建一个原生类池、一个原生实例池以及原生中介模块,并将其映射到JS层,分别获取对应的一个JS类池、一个JS实例池以及JS中介模块;在JS层中向JS中介模块发起创建对应一原生模块的实例的请求;JS中介模块发送请求中包含的所述实例的创建参数至原生中介模块;原生中介模块依据所述创建参数在原生实例池中创建对应所述一原生模块的原生实例,并将其映射到JS层的JS实例池中。本专利技术提供的另一个技术方案为:一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时能实现上述JS调用原生对象的方法所包含的所有步骤。本专利技术的有益效果在于:本专利技术在原生层创建用于存储类和实例的原生类池和原生实例池,以及能对所有类进行操作的中介模块,并且基于JS原型原理,在JS层将同步创建出与原生层对应的JS类池、JS实例池和中介模块;用户可以对应任意一个类,通过中介模块创建多个的实例,并存储在实例池中,各个实例相互隔离,互不影响;由此便能通过JS的中介模块对JS实例的方法调用,而传递到原生中介模块对原生实例的方法调用。本专利技术扩展了JS对原生模块的操作方式,支持通过JS创建原生模块的多个实例,且不同实例间数据的隔离,不相互依赖,因此支持通过JS对原生实例的并行调用,从而实现了在基于React-native的页面上,对不同接口的并行操作,进而显著缩短了接口请求时间,解决界面卡顿问题,优化了用户体验。附图说明图1为现有技术的框架默认的映射关系示意图;图2为本专利技术的JS调用原生对象的方法的流程示意图;图3为本专利技术的原生层与JS层的映射示意图;图4为本专利技术的实例与类的映射关系示意图;图5为实施例一的初始化流程示意图;图6为实施例一的方法调用流程示意图;图7为实施例一的实例创建流程示意图;图8为实施例一的实例删除流程示意图;图9为实施例一的单一实例方法调用整体流程示意图;图10为实施例一的类实例方法调用整体流程示意图;图11为实施例一的原生层与JS层的整体架构示意图。具体实施方式为详细说明本专利技术的
技术实现思路
、所实现目的及效果,以下结合实施方式并配合附图予以说明。本专利技术最关键的构思在于:原生层和JS层分别创建类池、实例池和中介模块,可以通过中介模块方便的创建多个相同原生类的实例,并相互隔离的进行操作,从而实现接口的并行操作。本专利技术涉及的技术术语解释:请参照图2至图4,本专利技术提供一种JS调用原生对象的方法,包括:在原生层分别创建一个原生类池、一个原生实例池以及原生中介模块,并将其映射到JS层,分别获取对应的一个JS类池、一个JS实例池以及JS中介模块;在JS层中向JS中介模块发起创建对应一原生模块的实例的请求;JS中介模块发送请求中包含的所述实例的创建参数至原生中介模块;原生中介模块依据所述创建参数在原生实例池中创建对应所述一原生模块的原生实例,并将其映射到JS层的JS实例池中。从上述描述可知,本专利技术的有益效果在于:本专利技术方案基于React-native框架,扩展了JS对原生模块的操作方式,支持通过JS创建原生模块的多个实例,不同实例间数据隔离,不互相依赖,可以并行进行操作,优化了用户体验。进一步的,对应一原生模块,所述原生实例池中存储有与其对应的多个原生实例。由上述描述可知,只需通过将原生模块的多个实例存储在原生实例中,便可实现对多个实例的并行操作。进一步的,还包括:在JS层中向JS中介模块发起调用所述一原生模块对应的一实例的请求;JS中介模块发送请求中包含的所述一实例的调用参数至原生中介模块;原生中介模块依据所述调用参数从原生实例池中获取所述一实例,并调用所述一实例的对应的方法。由上述描述可知,可以通过JS层和原生层都存在的中介模块起到桥梁的传递作用,实现由JS层发起对原生实例的调用,直接操作到原生实例上。进一步的,所述在JS层中向JS中介模块发起创建对应一原生模块的实例的请求,之前,包括:原生中介模块依据一原生模块分别添加对应的原生类和原生实例至原生类池和原生实例池,并将其分别映射到JS层的JS类池和JS实例池。由上述描述可知,在JS端根据JS的原型原理,创建出一份与原生注入类对应的类池,与原生实例对应的实例池,以及中介模块,为后续基于JS端的并行操作提供基础。进一步的,还包括:在JS层中向JS中介模块发起删除对应一实例的请求;JS中介模块发送请求中包含的待删除实例的实例标识至原生中介模块;原生中介模块依据所述实例标识在原生实例池中查找并删除对应的原生实例。由上述描述可知,支持在确认不再使用一实例时,提供删除原生实例的方式,方便数据管理以及实现存储数据的优化。进一步的,所述原生类池中的各个原生类与所述JS类池中的各个JS类之间、所述原生实例池中的各个原生实例与JS实例池中的各个JS实例之间通过唯一的标识符进行对应。由上述描述可知,基于JS的原型原理,JS层包含了从原生层映射过来的内容,且二者之间通过唯一的标识进行映射,确保一一对应的关系,以实现通过对JS实例的调用,直接操作到原生实例上。进一步的,还包括:应用程序启动时,获取实现注入接口的类集合;遍历所述类集合中的各个类,判断当前本文档来自技高网
...

【技术保护点】
1.一种JS调用原生对象的方法,其特征在于,包括:在原生层分别创建一个原生类池、一个原生实例池以及原生中介模块,并将其映射到JS层,分别获取对应的一个JS类池、一个JS实例池以及JS中介模块;在JS层中向JS中介模块发起创建对应一原生模块的实例的请求;JS中介模块发送请求中包含的所述实例的创建参数至原生中介模块;原生中介模块依据所述创建参数在原生实例池中创建对应所述一原生模块的原生实例,并将其映射到JS层的JS实例池中。

【技术特征摘要】
1.一种JS调用原生对象的方法,其特征在于,包括:在原生层分别创建一个原生类池、一个原生实例池以及原生中介模块,并将其映射到JS层,分别获取对应的一个JS类池、一个JS实例池以及JS中介模块;在JS层中向JS中介模块发起创建对应一原生模块的实例的请求;JS中介模块发送请求中包含的所述实例的创建参数至原生中介模块;原生中介模块依据所述创建参数在原生实例池中创建对应所述一原生模块的原生实例,并将其映射到JS层的JS实例池中。2.如权利要求1所述的一种JS调用原生对象的方法,其特征在于,对应一原生模块,所述原生实例池中存储有与其对应的多个原生实例。3.如权利要求1所述的一种JS调用原生对象的方法,其特征在于,还包括:在JS层中向JS中介模块发起调用所述一原生模块对应的一实例的请求;JS中介模块发送请求中包含的所述一实例的调用参数至原生中介模块;原生中介模块依据所述调用参数从原生实例池中获取所述一实例,并调用所述一实例的对应的方法。4.如权利要求1所述的一种JS调用原生对象的方法,其特征在于,所述在JS层中向JS中介模块发起创建对应一原生模块的实例的请求,之前,包括:原生中介模块依据一原生模块分别...

【专利技术属性】
技术研发人员:刘德建黄明炜蔡睦堃郭玉湖
申请(专利权)人:福建天泉教育科技有限公司
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1