掌桥专利:专业的专利平台
掌桥专利
首页

一种应用程序加载方法、移动终端及可读存储介质

文献发布时间:2023-06-19 10:02:03


一种应用程序加载方法、移动终端及可读存储介质

技术领域

本发明涉及应用程序开发领域,尤其涉及一种应用程序加载方法、移动终端及可读存储介质。

背景技术

随着各应用程序所集成的功能越来越多,各个功能模块开始通过插件的方式集成在宿主应用程序中。目前在应用程序插件开发过程中,比较受欢迎的开发技术框架当属RN(React Native)了,它通过桥接类的方式让开发人员跳过了原生平台API的学习,提高了开发的效率,且具有跨平台的优势。RN插件需要运行在RN基础运行环境中。现在方案中都是在宿主应用程序初始化中静态加载原生桥接类,并在之后的闲置时间加载各个RN插件的基础运行环境,当用户真正打开RN插件中的具体业务请求时,再加载业务对应的JS代码,这种分步加载的方式缩短了业务运行页面的渲染时间。

RN插件无法独立运行,必须运行在加载好的RN基础运行环境中,上述分步加载方案是在加载应用程序时静态加载了相关的原生桥接类,在RN插件业务运行时不会再有原生桥接类的加载,也就是说RN插件所依赖的原生桥接类必须在RN基础运行环境加载时完成初始化,而无法在后续动态加载RN插件时进行加载,这就需要维护RN基础运行环境的开发团队熟悉各个插件及其业务内容,而业务团队却不能根据需要开发桥接类组件,导致交流成本和开发成本的提升,降低多团队合作开发维护RN组件的效率。

发明内容

为此,本发明提供了一种应用程序加载方法、移动终端及可读存储介质,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供一种应用程序加载方法,适于在移动终端中执行,其中,移动终端中安装有应用程序,应用程序包括可执行文件、代码加载引擎和至少一个动态插件,可执行文件中包括第一原生桥接类,动态插件包括第二原生桥接类,动态插件可以完成多个业务请求,方法包括:打开应用程序时,注册第一原生桥接类;通过代码加载引擎加载基础环境代码支持文件创建基础运行环境;应用程序加载动态插件时,注册第二原生桥接类;执行动态插件中的业务请求时,初始化第二原生桥接类。

可选的,在根据本发明的应用程序加载方法中,移动终端安装有操作系统,其中打开应用程序时,注册第一原生桥接类包括:应用程序通过移动终端的操作系统加载可执行文件时,注册可执行文件中的第一原生桥接类。

可选的,在根据本发明的应用程序加载方法中,操作系统为IOS系统,注册可执行文件中的第一原生桥接类包括:通过第一原生桥接类的load方法完成第一原生桥接类的注册。

可选的,在根据本发明的应用程序加载方法中,代码加载引擎为RN引擎,基础环境代码支持文件为common.jsbundle,基础运行环境为RN基础运行环境,其中,通过代码加载引擎加载基础环境代码支持文件创建基础运行环境包括:在通过RN引擎加载common.jsbundle时,初始化第一原生桥接类;将初始化的第一原生桥接类存储到初始化桥接类集合中。

可选的,在根据本发明的应用程序加载方法中,每一个原生桥接类只注册一次,应用程序加载动态插件时,注册第二原生桥接类包括:注册第二原生桥接类中未注册过的原生桥接类。

可选的,在根据本发明的应用程序加载方法中,执行动态插件中的业务请求时,初始化第二原生桥接类包括:获取第二原生桥接类中未初始化的原生桥接类;初始化未初始化的原生桥接类,并更新到初始化桥接类集合中。

可选的,在根据本发明的应用程序加载方法中,获取第二原生桥接类中未初始化的原生桥接类包括:遍历所有注册过的原生桥接类,获取不存在于初始化桥接类集合中的原生桥接类,并作为未初始化的原生桥接类。

可选的,在根据本发明的应用程序加载方法中,应用程序通过RN框架架构开发实现,RN框架架构包括业务JS层、C++层、原生桥接类和原生层,原生桥接类可以和原生层进行数据通信,C++层连接原生桥接类和业务JS层,C++层包含Instance类,初始化桥接类集合保存在C++层的instance类。

可选的,在根据本发明的应用程序加载方法中,还包括:当用户执行动态插件中的业务请求时,通过业务JS层将业务请求名称传递给C++层;C++层通过Instance类根据接收到的业务请求名称在初始化桥接类集合中获取对应的原生桥接类;执行对应的原生桥接类中的方法,并获得业务请求的执行结果;将执行结果返回给业务JS层。

可选的,在根据本发明的应用程序加载方法中,原生桥接类为实现了RCTBridgeModule协议的原生组件。

根据本发明的又一方面,提供一种移动终端,包括:一个或多个处理器;存储器;以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序包括用于执行上述应用程序加载方法的指令。

根据本发明的又一方面,提供一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,指令当由移动终端执行时,使得移动终端执行上述应用程序加载方法。

根据本发明的应用程序加载方法,在打开应用程序时,加载一部分原生桥接类,例如一些公共的原生桥接类,并创建基础运行环境,而在后续加载动态插件时,完成动态插件包括的原生桥接类的加载,即实现了原生桥接类的动态加载,从而在插件的开发过程,基础运行环境插件团队可以只关注基础运行环境的开发,而不需要熟悉各个插件和其业务内容,而对于插件开发团队,则可以根据具体需求开发桥接类组件,免去了团队之间到的交流成本,提高了协作开发的效率。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的移动终端100的框图;

图2示出了根据本发明一个实施例的应用程序加载方法200的流程图;

图3示出了根据本发明一个实施例的动态插件加载过程300的流程图;

图4示出了根据本发明一个实施例的RN框架架构400的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1是移动终端100的结构框图,移动终端100可以包括存储器接口102、一个或多个数据处理器、图像处理器和/或中央处理单元104,以及外围接口106。

存储器接口102、一个或多个处理器104和/或外围接口106既可以是分立元件,也可以集成在一个或多个集成电路中。在移动终端100中,各种元件可以通过一条或多条通信总线或信号线来耦合。传感器、设备和子系统可以耦合到外围接口106,以便帮助实现多种功能。

例如,运动传感器110、光线传感器112和距离传感器114可以耦合到外围接口106,以方便定向、照明和测距等功能。其他传感器116同样可以与外围接口106相连,例如定位系统(例如GPS接收机)、温度传感器、生物测定传感器或其他感测设备,由此可以帮助实施相关的功能。

相机子系统120和光学传感器122可以用于方便诸如记录照片和视频剪辑的相机功能的实现,其中所述相机子系统和光学传感器例如可以是电荷耦合器件(CCD)或互补金属氧化物半导体(CMOS)光学传感器。可以通过一个或多个无线通信子系统124来帮助实现通信功能,其中无线通信子系统可以包括射频接收机和发射机和/或光(例如红外)接收机和发射机。无线通信子系统124的特定设计和实施方式可以取决于移动终端100所支持的一个或多个通信网络。例如,移动终端100可以包括被设计成支持LTE、3G、GSM网络、GPRS网络、EDGE网络、Wi-Fi或WiMax网络以及Bluebooth

音频子系统126可以与扬声器128以及麦克风130相耦合,以便帮助实施启用语音的功能,例如语音识别、语音复制、数字记录和电话功能。I/O子系统140可以包括触摸屏控制器142和/或一个或多个其他输入控制器144。触摸屏控制器142可以耦合到触摸屏146。举例来说,该触摸屏146和触摸屏控制器142可以使用多种触摸感测技术中的任何一种来检测与之进行的接触和移动或是暂停,其中感测技术包括但不局限于电容性、电阻性、红外和表面声波技术。一个或多个其他输入控制器144可以耦合到其他输入/控制设备148,例如一个或多个按钮、摇杆开关、拇指旋轮、红外端口、USB端口、和/或指示笔之类的指点设备。所述一个或多个按钮(未显示)可以包括用于控制扬声器128和/或麦克风130音量的向上/向下按钮。

存储器接口102可以与存储器150相耦合。该存储器150可以包括高速随机存取存储器和/或非易失性存储器,例如一个或多个磁盘存储设备,一个或多个光学存储设备,和/或闪存存储器(例如NAND,NOR)。存储器150可以存储操作系统172,例如Android、iOS或是Windows Phone之类的操作系统。该操作系统172可以包括用于处理基本系统服务以及执行依赖于硬件的任务的指令。存储器150还可以存储程序174。在移动设备运行时,会从存储器150中加载操作系统172,并且由处理器104执行。程序174在运行时,也会从存储器150中加载,并由处理器104执行。程序174运行在操作系统之上,利用操作系统以及底层硬件提供的接口实现各种用户期望的功能,如即时通信、网页浏览、图片管理等。程序174可以是独立于操作系统提供的,也可以是操作系统自带的。另外,程序174被安装到移动终端100中时,也可以向操作系统添加驱动模块。在一些实施例中,移动终端100被配置为执行根据本发明的应用程序加载方法。其中,移动终端100的一个或多个程序174包括用于执行根据本发明的应用程序加载方法200的指令。

图2示出了根据本发明一个实施例的应用程序加载方法200的流程图,该方法适于在移动终端中执行(例如图1所示的移动终端100),移动终端中安装有应用程序,应用程序包括一个可执行文件、代码加载引擎,至少包括一个动态插件,还可以包括静态插件,所谓动态插件是指在应用程序启动后根据用户请求加载的插件,静态插件指在应用程序启动过程中加载的插件。

如图2所示,方法200始于步骤S210,在打开应用程序时,注册第一原生桥接类。应用程序安装在移动终端设备(例如图1所示的移动终端100)中,当用户通过移动终端打开应程序时,通过移动终端的操作系统加载应用程序,操作系统可以是安卓(Android)系统、IOS系统,但不限于此。应用程序中的可执行文件是应用程序的入口,通过移动终端运行的操作系统加载可执行文件,打开应用程序。可执行文件中包含一部分原生桥接类,即第一原生桥接类,这一类原生桥接类可以是一些公共的原生桥接类,或者是一些需要静态加载的静态插件所依赖的原生桥接类。

根据本发明的一个实施例,用户智能手机上安装有汽车之家应用程序(APP),该APP包含开屏广告插件、资讯插件、论坛插件、搜索插件、选车插件、服务频道插件等。其中开屏广告插件、资讯插件、论坛插件和搜索插件为静态插件,选车插件和服务频道插件为动态插件。在用户打开该应用程序时,应用程序通过用户智能手机的操作系统(例如IOS系统)运行可执行汽车之家APP的可执行文件,同时注册其中包含的原生桥接类A1、A2、B1、B2、C1、C2,开屏广告插件、资讯插件、论坛插件和搜索插件所依赖的RN原生桥接类就包含在其中。以IOS系统平台为例,NSObject类为原生桥接类的基类,可以通过其中的load方法触发完成注册。

随后在步骤S220中,创建基础运行环境。在以RN框架架构事项的APP加载过程中,通过RN引擎创建RN基础运行环境,此时需要加载RN基础运行环境代码支持文件,同时完成步骤S210中注册过的原生桥接类的初始化,并将初始化后的原生桥接类存储到APP管理的一个初始化桥接类集合中。

继续以上述汽车之家APP为例,在步骤S210中,包含在可执行文件中的原生桥接类已完成注册,在步骤S220中,会加载RN基础运行环境JS代码支持文件common.jsbundle,在加载common.jsbundle过程中,初始化已完成注册的原生桥接类A1、A2、B1、B2、C1、C2,并将初始化的原生桥接类存储在宿主程序(本实施例中指汽车之家APP)管理的一个集合中,为了便于说明,这里称为S集合,则当前S集合中包含A1、A2、B1、B2、C1、C2。

随后在步骤S230中,当用户进入应用程序所包含的动态插件时,加载动态插件,并注册动态插件所包含的原生桥接类,即第二原生桥接类。

根据本发明的一个实施例,如果用户进入汽车之家的选车服务插件页面,将注册选车服务插件包含的原生桥接类,对于IOS系统而言,通过每一个原生桥接类中的load方法完成注册。

对于每一个原生桥接类,只执行一次load方法,比如,选车服务插件包含的原生桥接类有A1、A2、A3、A4,其中A1和A2已经在步骤S210中注册过了,在本步骤中,只执行A3和A4中的load方法完成A3和A4的注册。

随后在步骤S240中,完成动态插件包含的原生桥接类的初始化。每一个动态插件都可以实现多个业务请求,当用户执行其中的业务请求时,通过创建好的RN基础运行环境加载该业务请求对应的JS代码支持文件,同时,遍历所有的已经注册过的RN原生桥接类,并初始化其中未初始化的RN原生桥接类。

以上述动态插件选车服务为例,当用户进入选车服务页面后添加更多条件时,执行添加更多条件对应的支持文件,此时,遍历所有注册过的原生桥接类A1、A2、B1、B2、C1、C2、A3、A4,对比初始化桥接类集合S,其中A3和A4未初始化,则本步骤中将初始化原生桥接类A3和A4,并存储到初始化桥接类集合S中。具体业务的执行结果将通过初始化过的原生桥接类中对应的方法获得。

图3示出了根据本发明一个实施例的动态插件加载过程300的流程图,是方法200中动态插件加载的具体流程。

如图3所示,该过程始于步骤S310,用户在进入宿主应用程序后,进入动态插件的RN原生页面。以汽车之家中的动态插件服务频道为例,用户打开汽车之家APP后进入服务频道的原生页面。

随后通过步骤S320完成当前运行的插件包含的原生桥接类的注册。需要说明的是,每一个RN原生桥接类在应用程序运行期间只注册一次,如果当前插件包含的RN原生桥接类在应用程序加载时已经注册过,或者在加载其他插件时注册过,都不会再注册。

根据本发明的一个实施例,服务频道包含的原生桥接类有B1、B2、A3、C3,其中B1、B2在应用程序启动时已完成注册,A3在之前运行选车服务插件时完成注册,则在进入服务频道插件时,只注册原生桥接类C3。

随后在步骤S330中,在用户执行具体的RN业务时,执行相应的JS代码支持文件。比如,用户进入服务频道中的油耗记录小工具页面时,加载油耗记录小工具JS代码支持文件。

随后在步骤S340中,获取当前应用程序中所有注册过的RN原生桥接类,包括应用程序可执行文件中包含的RN原生桥接和后续动态插件注册的RN原生桥接类,在上述进入服务频道中油耗记录实例中,当前所有注册过的原生桥接类包括A1、A2、B1、B2、C1、C2、A3、A4、C3。

随后进入步骤S350,判断所有注册过的RN原生桥接类中是否有未初始化的原生桥接类。

当前初始化桥接类集合中包含的桥接类有A1、A2、B1、B2、C1、C2、A3、A4,与上述所有注册过的原生桥接类比较可知,C3未被初始化。此时,进入进入步骤S360。

在步骤S360中,对注册过但未被初始化的原生桥接类进行会初始化,并更新到原生桥接类中。

在用户进入服务频道中的油耗记录小工具这一实施例中,本步骤中将初始化原生桥接类C3,并将C3更新到集合S中。

随后进入步骤S370,根据用户的业务请求,从集合S中获取对应用户业务请求的桥接类的方法计算用户业务请求结果。

最终通过步骤S380将业务请求结果渲染在油耗记录页面中。

根据本发明的一个实施例,当步骤S350的检测结果为所有注册过的RN原生桥接类均注册过时,则直接进入步骤S370,获取业务请求结果,并通过步骤S380展示给用户。

本发明中涉及的应用程序及插件可以在RN框架架构中实现,图4示出了根据本发明一个实施例的RN框架架构400的示意图。

如图4所示,RN框架架构包含原生层410、原生桥接类层420、C++层430和业务JS层440。

原生层410,可以是Android原生API、IOS原生API,但不限于此。

RN原生桥接类420,用于实现与原生层410的数据通信,对于IOS系统平台,每一个原生桥接类就是一个实现了“RCTBridgeModule”协议的Objective-C类。

C++层430连接原生桥接类420和业务JS440,C++层包含一个Instance类,所有初始化的原生桥接类将传递给Instance类。

业务JS440即为上文提到的业务JS代码支持文件,用于接收用户的业务请求。

根据本发明的一个实施例,当用户执行动态插件中的某业务请求时,JS层将获取相应的业务请求名称并传递给C++层,C++层通过Instance类根据接收到的业务请求名称找到相应的原生桥接类,通过执行原生桥接类中的方法获得业务请求的结果,并将结果返回业务JS,最终通过用户界面渲染业务请求结果。

根据本发明的应用程序加载方法,在打开应用程序时,加载一部分原生桥接类,例如一些公共的原生桥接类,并创建RN基础运行环境,而在后续加载动态插件时,完成动态插件包括的原生桥接类的加载,即实现了RN原生桥接类的动态加载,从而使插件的开发过程中,RN基础运行环境插件团队可以只关注RN基础运行环境的开发,而不需要熟悉各个插件和其业务内容,而对于插件开发团队,则可以根据具体需求开发桥接类组件,免去了团队之间到的交流成本,提高了协作开发的效率。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的应用程序加载方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明还包括:

A9、如A8所述方法,还包括:

当用户执行动态插件中的业务请求时,通过所述业务JS层将业务请求名称传递给C++层;

C++层通过Instance类根据接收到的业务请求名称在所述初始化桥接类集合中获取对应的原生桥接类;

执行所述对应的原生桥接类中的方法,并获得所述业务请求的执行结果;

将执行结果返回给业务JS层。

A10、如A1-A9中任意一项所述的方法,其中,所述原生桥接类为实现了RCTBridgeModule协议的原生组件。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

相关技术
  • 一种应用程序加载方法、移动终端及可读存储介质
  • 应用程序预加载方法、装置、存储介质及移动终端
技术分类

06120112389974