CN113703878B - 组件的启动方法和装置、存储介质及电子设备 - Google Patents
组件的启动方法和装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN113703878B CN113703878B CN202111267418.5A CN202111267418A CN113703878B CN 113703878 B CN113703878 B CN 113703878B CN 202111267418 A CN202111267418 A CN 202111267418A CN 113703878 B CN113703878 B CN 113703878B
- Authority
- CN
- China
- Prior art keywords
- component
- instance
- type
- stack
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种组件的启动方法和装置、存储介质及电子设备。其中,该方法包括:在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证,在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。本发明解决了相关技术中会存在应用程序的运行效率较低的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种组件的启动方法和装置、存储介质及电子设备。
背景技术
目前的相关技术中,应用程序一般通过启动组件来实现运行,例如,启动Activity组件以显示对应的界面,其中,Activity的动态加载一直是虚拟化技术中的难题,原因在于系统只允许在Manifest清单文件中申明过的Activity才能启动。当一个应用程序被安装时,它的Manifest清单会被解析并缓存在PMS中,当一个应用程序需要启动一个Activity时,会请求AMS验证,这时AMS会查阅该Activity是否存在于Manifest清单中,如果不存在,则抛出未注册异常。
Manifest文件是一份编译期就写好的静态文件,并不能动态添加,当想要加载应用程序时,往往是不知道要加载的应用中Activity的配置是怎样的,更不能提前将其他应用程序的Activity的配置添加到自己的Manifest中,所以,这样会导致加载其他应用程序失败。
现有方案是通过枚举Activity配置来形成一个配置库实现的,标准模式的Activity每次都会创建新的实例,坑位可以复用,所以只埋一个标准的坑位就好了,其他模式的由于可能会唤起已存在的activity而非新建,所以坑位无法复用,只能多埋几个,市面上的框架通常会在一个进程中预埋4-8个,框架层通常还会预埋例如6个以上的进程,所以配置数量非常庞大。
因此,相关技术中会存在应用程序的运行效率较低的技术问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种组件的启动方法和装置、存储介质及电子设备,以至少解决相关技术中会存在应用程序的运行效率较低的技术问题。
根据本发明实施例的一个方面,提供了一种组件的启动方法,包括:在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将所述第一组件模拟成目标组件类型的第一模拟组件,并对所述目标组件类型的第一模拟组件进行认证;在对所述目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取所述第一组件的组件类型,其中,所述目标堆栈的当前堆栈信息包括所述目标终端上的应用程序已创建的一组组件实例,所述目标堆栈是对所述目标终端的系统进程管理的组件堆栈模拟得到的堆栈;根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例。
根据本发明实施例的另一方面,还提供了一种组件的启动装置,包括:模拟模块,用于在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将所述第一组件模拟成目标组件类型的第一模拟组件,并对所述目标组件类型的第一模拟组件进行认证;获取模块,用于在对所述目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取所述第一组件的组件类型,其中,所述目标堆栈的当前堆栈信息包括所述目标终端上的应用程序已创建的一组组件实例,所述目标堆栈是对所述目标终端的系统进程管理的组件堆栈模拟得到的堆栈;处理模块,用于根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例。
可选地,所述装置还用于:在所述目标终端运行的所述第一应用程序请求启动所述第一组件之前,在所述目标终端运行的第二应用程序启动第二组件的过程中,对所述第二应用程序的第二应用进程的创建信息进行劫持,其中,所述第二应用进程用于根据所述系统进程的创建指令创建所述第二组件的组件实例,所述创建信息用于表示所述第二应用进程创建的所述第二组件的组件实例;将劫持到的所述创建信息更新到所述目标堆栈中,其中,所述目标堆栈与所述组件堆栈相同。
可选地,所述装置用于通过如下方式获取所述第一组件的组件类型:对所述第一应用程序的第一应用进程的组件信息参数进行劫持,得到所述组件信息参数中的所述第一组件的组件类型,其中,所述第一应用进程用于创建所述第一组件的组件实例,所述组件信息参数是响应于请求启动所述第一组件所生成的参数。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为标准类型时,创建所述第一组件对应的所述标准类型的第一组件实例,并将所述第一组件实例放入所述目标堆栈的栈顶,其中,所述标准类型的组件被设置为在被启动时需要创建一个新的组件实例;启动所述目标堆栈中的所述第一组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为第一类型、且所述当前堆栈信息表示位于所述目标堆栈的栈顶的组件实例不是所述第一组件的组件实例时,创建所述第一组件对应的所述第一类型的第二组件实例,并将所述第二组件实例放入所述目标堆栈的栈顶,其中,所述第一类型的组件的组件实例被设置为当所述第一类型的组件被启动、且所述第一类型的组件的组件实例位于所述目标堆栈的栈顶时,允许复用所述第一类型的组件的组件实例;启动所述目标堆栈中的所述第二组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为所述第一类型、且所述当前堆栈信息表示位于所述目标堆栈的栈顶的第三组件实例是所述第一组件的组件实例时,将所述第三组件实例确定为用于启动所述第一组件的组件实例;启动位于所述目标堆栈的栈顶的所述第三组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为第二类型、且所述目标堆栈中存在所述第一组件的第四组件实例时,弹出所述目标堆栈中位于所述第四组件实例之上的组件实例,并将所述目标堆栈中的所述第四组件实例确定为用于启动所述第一组件的组件实例,其中,所述第二类型的组件的组件实例被设置为当所述第二类型的组件被启动、在所述目标堆栈中存在所述第二类型的组件的组件实例、且弹出所述目标堆栈中位于所述第二类型的组件的组件实例之上的组件实例时,允许复用所述目标堆栈中的所述第二类型的组件的组件实例;启动所述目标堆栈中的所述第四组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为所述第二类型、且所述目标堆栈中不存在所述第一组件的组件实例时,创建所述第一组件对应的所述第二类型的第五组件实例,并将所述第五组件实例放入所述目标堆栈的栈顶;启动所述目标堆栈中的所述第五组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为第三类型、且所述系统进程管理的全部堆栈中均不存在所述第一组件的组件实例时,创建所述第一组件对应的所述第三类型的第六组件实例,并将所述第六组件实例放入新创建的第一堆栈中,其中,所述第三类型的组件的组件实例被设置为在所述系统进程管理的全部堆栈中均不存在所述第三类型的组件的组件实例时,允许创建所述第三类型的组件的组件实例,并将创建的所述第三类型的组件的组件实例放入新创建的堆栈中;启动所述第一堆栈中的所述第六组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例:在所述第一组件的组件类型为所述第三类型、且所述系统进程管理的第二堆栈中存在所述第一组件的第七组件实例时,将所述第二堆栈中的所述第七组件实例确定为用于启动所述第一组件的组件实例,其中,所述第二堆栈为在获取所述第一组件的组件类型之前存在的堆栈;启动所述第二堆栈中的所述第七组件实例。
可选地,所述装置用于通过如下方式根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例:根据所述第一组件的组件类型确定所述第一组件的复用函数;根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息确定所述第一组件是否需要执行复用操作;在所述第一组件需要执行复用操作的情况下,调动所述复用函数为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例。
可选地,所述装置还用于:通过目标钩子函数劫持所述第一组件的启动信息,所述启动信息用于表示启动的所述第一组件的组件实例是否是复用的组件实例,所述目标钩子函数是在所述第一应用程序的应用进程中预埋的钩子函数;在所述启动信息表示启动的所述第一组件的组件实例是复用的组件实例时,触发执行目标回调函数,以记录复用信息,其中,所述复用信息表示启动的所述第一组件的组件实例是复用的组件实例。
可选地,所述装置还用于:在按照预先设置的目标组件类型配置,将所述第一组件模拟成目标组件类型的第一模拟组件之前,在第三应用程序内建的虚拟机中运行所述第一应用程序,其中,所述第三应用程序运行在所述目标终端的操作系统中;获取所述第一应用程序发送的启动请求,其中,所述启动请求用于请求启用所述第一组件。
根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述组件的启动方法。
根据本申请实施例的又一方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上组件的启动方法。
根据本发明实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过所述计算机程序执行上述的组件的启动方法。
在本发明实施例中,采用在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例的方式,通过在一个进程中只需预埋一个组件类型配置,就可以支持所有组件类型配置的运行效果,而且可以无限扩充,无需关心组件类型配置的数量问题,达到了预配置文件只需增加几行代码,不会影响预配置文件的可读性,并且对安装速度的影响微乎其微的目的,从而实现了提高应用程序的运行效率的技术效果,进而解决了相关技术中会存在应用程序的运行效率较低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的组件的启动方法的应用环境的示意图;
图2是根据本发明实施例的一种可选的组件的启动方法的流程示意图;
图3是根据本发明实施例的一种可选的组件的启动方法的示意图;
图4是根据本发明实施例的另一种可选的组件的启动方法的示意图;
图5是根据本发明实施例的一种可选的组件的启动方法的第一组件实例的示意图;
图6是根据本发明实施例的一种可选的组件的启动方法的第二组件实例的示意图;
图7是根据本发明实施例的一种可选的组件的启动方法的第三组件实例的示意图;
图8是根据本发明实施例的一种可选的组件的启动方法的第四组件实例的示意图;
图9是根据本发明实施例的一种可选的组件的启动方法的第六组件实例的示意图;
图10是根据本发明实施例的一种可选的组件的启动方法的第七组件实例的示意图;
图11是根据本发明实施例的一种可选的组件的启动装置的结构示意图;
图12是根据本发明实施例的一种可选的组件的启动产品的结构示意图;
图13是根据本发明实施例的一种可选的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
虚拟化:一种在App内搭建Android虚拟机运行其他App的技术。
Activity:安卓系统中用来展示界面的组件。
沙箱:一个APP用虚拟化技术虚拟出来的一个环境,用来运行另一个APP。
ActivityStack:即Activity栈,以栈的形式存储Activity的一种数据结构。
ActivityManagerService:即AMS,安卓系统中用来管理Activity的服务,运行在系统进程。
PackageManagerService:即PMS,安卓系统中用来管理安卓包的服务,运行在系统进程。
Manifest:安卓系统中用来申明组件的清单文件。
组件配置:Activity清单配置,安卓系统认为每个APP有一份组件清单,某个Activity如果要正常运行,需要在这份清单中添加配置。
动态代理:Java中动态替换某个接口实现的方法。
Apk:安卓APP的应用程序安装包。
启动模式:Activity有四种启动模式,不通启动模式会影响activity在堆栈中的存放表现。
Standard模式:该模式下,都会默认创建一个新的实例。因此,可以有多个相同的实例,也允许多个相同Activity叠加。
SingleTop模式:可以有多个实例,但是不允许多个相同Activity叠加。如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
SingleTask模式:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
SingleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
startActivity:安卓系统中启动一个Activity组件的方法函数。
栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
下面结合实施例对本发明进行说明:
根据本发明实施例的一个方面,提供了一种组件的启动方法,可选地,在本实施例中,上述组件的启动方法可以应用于如图1所示的由服务器101和终端设备103所构成的硬件环境中。如图1所示,服务器101通过网络与终端103进行连接,可用于为终端设备或终端设备上安装的应用程序提供服务,应用程序可以是视频应用程序、即时通信应用程序、浏览器应用程序、教育应用程序、游戏应用程序等。可在服务器上或独立于服务器设置数据库105,用于为服务器101提供数据存储服务,例如,游戏数据存储服务器,上述网络可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、WIFI及其他实现无线通信的网络,终端设备103可以是配置有应用程序107的终端,可以包括但不限于以下至少之一:手机(如Android手机、iOS手机等)、笔记本电脑、平板电脑、掌上电脑、MID(Mobile Internet Devices,移动互联网设备)、PAD、台式电脑、智能语音交互设备、智能家电、车载终端等计算机设备,上述服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,或者是云服务器。
结合图1所示,上述组件的启动方法可以在终端设备103通过如下步骤实现:
S1,在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;
S2,在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,其中,目标堆栈的当前堆栈信息包括目标终端上的应用程序已创建的一组组件实例,目标堆栈是对目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
S3,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,在本实施例中,上述组件的启动方法还可以通过服务器实现,例如,图1所示的服务器101中实现;或由用户终端和服务器共同实现。
上述仅是一种示例,本实施例不做具体的限定。
可选地,作为一种可选的实施方式,如图2所示,上述组件的启动方法包括:
S202,在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;
S204,在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,其中,目标堆栈的当前堆栈信息包括目标终端上的应用程序已创建的一组组件实例,目标堆栈是对目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
S206,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,在本实施例中,上述组件的启动方法的应用场景可以包括但不限于医疗、金融、征信、银行、政务、政府、能源、教育、安防、楼宇、游戏、交通、物联、工业等多种应用场景,具体而言,可以包括但不限于消息、提醒、语音多媒体、加油、充电、停车、行程分享 、广告、旅游等相关的车联网各场景应用或者智慧交通方面的应用。
可选地,在本实施例中,上述目标终端可以包括但不限于为手机、pad等允许安装运行应用程序的终端,上述第一应用程序可以包括但不限于为在目标终端上已经安装完成的应用程序,具体而言,可以包括但不限于为在安卓环境的虚拟化框架内运行的应用程序。
可选地,在本实施例中,上述第一组件可以包括但不限于为应用程序运行过程中需要启动的组件,例如,以安卓系统为例,可以包括但不限于为Activity组件。
需要说明的是,Android系统有四种启动类型的Activity配置,现有技术方案通常会在虚拟机框架中预先增加多个每种启动类型的Activity配置,形成一个大而全的配置池,而在本实施例中,只需要预先设置目标组件类型的配置,例如,标准启动类型的Activity配置,将任意Activity组件均模拟成标准启动类型的Activity组件,以实现Activity组件的认证。
可选地,在本实施例中,上述对目标组件类型的第一模拟组件进行认证可以包括但不限于以安卓系统为例,当startActivity方法启动一个Activity组件时,将认证信息发送至ActivityManagerService(AMS),在AMS认证后允许启动Activity组件。
可选地,在本实施例中,上述目标堆栈可以包括但不限于在虚拟化框架中由宿主应用程序管理的堆栈,上述宿主应用程序即为建立虚拟化框架的应用程序,宿主应用程序通过对目标终端的系统进程管理的组件堆栈进行模拟,以得到上述目标堆栈。
具体而言,可以包括但不限于宿主应用程序使用钩子函数代理系统集成管理组件堆栈的接口,以获取到系统进程所管理的组件堆栈中的堆栈信息,并且,应用程序调用组件生成组件实例的过程中,当系统进程返回堆栈信息时,同时向宿主应用程序模拟的第二应用进程发送上述系统进程返回的堆栈信息,进而,在第二应用进程中模拟管理上述目标堆栈。
可选地,在本实施例中,上述当前堆栈信息可以包括但不限于获取到启动第一组件的请求时的当前堆栈信息,上述获取第一组件的组件类型可以包括但不限于按照组件的启动类型确定的组件类型,以安卓系统中的 Activity组件为例,Activity有四种启动模式,不同启动模式会影响Activity在堆栈中的存放表现,具体为:
Standard模式:该模式下,都会默认创建一个新的实例。因此,可以有多个相同的实例,也允许多个相同Activity叠加。
SingleTop模式:可以有多个实例,但是不允许多个相同Activity叠加。如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例。
SingleTask模式:在同一个应用程序中启动时,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉。
SingleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
上述仅是一种示例,本实施例不做任何具体的限定。
可选地,在本实施例中,上述根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例可以包括但不限于根据第一组件的组件类型以及当前堆栈信息确定是通过创建新的组件实例还是复用目标堆栈中已有的组件实例,以实现为第一组件配置对应的组件实例。
例如,图3是根据本发明实施例的一种可选的组件的启动方法的示意图,如图3所示,以上述组件的启动方法应用于安卓系统,组件为Activity为例,上述目标组件类型配置可以包括但不限于Standard模式组件类型配置,通过预埋Standard模式的Activity配置,将Standard模式、SingleTop模式、SingleTask模式以及SingleInstance模式均模拟为Standard模式,由于Standard模式预先在AMS注册完成,此时,直接将所有启动类型的Activity配置都用Standard的配置来代替,以实现根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,在本实施例中,上述组件实例即为根据组件配置得到的实例,例如,某应用程序启动了Activity组件,则针对该Activity组件在系统进程管理对应的堆栈信息,并在堆栈信息表示已经启动的情况下,创建于该Activity组件对应的组件实例,以显示在终端设备的显示界面中。
通过本实施例,采用在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例的方式,通过在一个进程中只需预埋一个组件类型配置,就可以支持所有组件类型配置的运行效果,而且可以无限扩充,无需关心组件类型配置的数量问题,达到了预配置文件只需增加几行代码,不会影响预配置文件的可读性,并且对安装速度的影响微乎其微的目的,从而实现了提高应用程序的运行效率的技术效果,进而解决了相关技术中会存在应用程序的运行效率较低的技术问题。
作为一种可选的方案,在目标终端运行的第一应用程序请求启动第一组件之前,方法还包括:
在目标终端运行的第二应用程序启动第二组件的过程中,对第二应用程序的第二应用进程的创建信息进行劫持,其中,第二应用进程用于根据系统进程的创建指令创建第二组件的组件实例,创建信息用于表示第二应用进程创建的第二组件的组件实例;
将劫持到的创建信息更新到目标堆栈中,其中,目标堆栈与组件堆栈相同。
可选地,在本实施例中,上述在目标终端运行的第二应用程序启动第二组件的过程中,对第二应用程序的第二应用进程的创建信息进行劫持可以包括但不限于通过静态代理的方式实现,上述第二组件可以包括但不限于与上述第一组件相同或者不同,上述第二应用进程可以包括但不限于与上述第一应用进程相同,上述第二应用进程的创建信息即为用于表示第二应用进程创建的第二组件的组件实例的流程信息,例如,以安卓系统为例,图4是根据本发明实施例的另一种可选的组件的启动方法的示意图,如图4所示,Context、Activity均为安卓系统的组件,由Context组件发出创建Activity组件的startActivity消息至生命周期处理者H.Callback,H.Callback在向AMS认证的过程中,所有创建信息(onCreate、onStart等)均除了正常更新在组件堆栈(AMS-1)外,还更新到目标堆栈(AMS-2)中,以使上述目标堆栈可以与组件堆栈相同。
需要说明的是,如果想要知道Activity什么时候复用,需要实时获取组件堆栈中的创建信息,但Activity的组件堆栈是维护在系统进程中的,一般应用进程无法获取,所以应用程序通过静态代理的方式劫持应用进程生命周期处理者H,在H执行原方法之前,多旁落一份创建信息到模拟的Activity目标堆栈中,完全模拟系统进程的数据结构和管理方式,使得应用进程可以完全掌握目前Activity的组件堆栈。
作为一种可选的方案,获取第一组件的组件类型,包括:
对第一应用程序的第一应用进程的组件信息参数进行劫持,得到组件信息参数中的第一组件的组件类型,其中,第一应用进程用于创建第一组件的组件实例,组件信息参数是响应于请求启动第一组件所生成的参数。
可选地,在本实施例中,上述对第一应用程序的第一应用进程的组件信息参数进行劫持可以包括但不限于采用动态代理的方式实现,需要知道即将要启动的第一组件的组件类型,才能做相应的复用策略。以安卓系统为例,通过动态代理的方式,劫持到IActivityManager的startActivity方法,从该方法中获取到ActivityInfo参数(对应于前述的组件信息参数),并从中获取到launchMode字段得知即将要启动的Activity的启动模式。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为标准类型时,创建第一组件对应的标准类型的第一组件实例,并将第一组件实例放入目标堆栈的栈顶,其中,标准类型的组件被设置为在被启动时需要创建一个新的组件实例;
启动目标堆栈中的第一组件实例。
可选地,在本实施例中,上述标准类型可以包括但不限于以Standard模式启动的Activity,当启动一个Standard模式的Activity时,不会有任何限制,会直接新建一个Standard模式的Activity实例放入栈顶。
例如,图5是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图5所示,以安卓系统为例,StandardA、StandardB以及StandardC为目标堆栈502中已经存在的组件实例,当第一组件的组件类型为Standard类型(StandardD)时,创建StandardD(第一组件实例),并将StandardD放入目标堆栈504的栈顶。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第一类型、且当前堆栈信息表示位于目标堆栈的栈顶的组件实例不是第一组件的组件实例时,创建第一组件对应的第一类型的第二组件实例,并将第二组件实例放入目标堆栈的栈顶,其中,第一类型的组件的组件实例被设置为当第一类型的组件被启动、且第一类型的组件的组件实例位于目标堆栈的栈顶时,允许复用第一类型的组件的组件实例;
启动目标堆栈中的第二组件实例。
可选地,在本实施例中,上述第一类型可以包括但不限于SingleTop启动的组件,通过判断目标堆栈的栈顶的组件实例是否是SingleTop启动的组件实例,确定是否创建新的组件实例或者复用SingleTop启动的组件实例。
例如,图6是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图6所示,以安卓系统为例,StandardA、SingleTopB以及StandardC为目标堆栈602中已经存在的组件实例,当第一组件的组件类型为SingleTop类型时,由于目标堆栈602的栈顶为StandardC,而不是SingleTopB,此时,创建SingleTop对应的第二组件实例SingleTopB,并将SingleTopB放入目标堆栈602的栈顶得到目标堆栈604。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第一类型、且当前堆栈信息表示位于目标堆栈的栈顶的第三组件实例是第一组件的组件实例时,将第三组件实例确定为用于启动第一组件的组件实例;
启动位于目标堆栈的栈顶的第三组件实例。
例如,图7是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图7所示,以安卓系统为例,StandardA、StandardB以及SingleTopC为目标堆栈702中已经存在的组件实例,当第一组件的组件类型为SingleTop类型时,直接复用目标堆栈702中SingleTopC组件实例,作为第三组件实例,并将SingleTopC放入目标堆栈704的栈顶。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第二类型、且目标堆栈中存在第一组件的第四组件实例时,弹出目标堆栈中位于第四组件实例之上的组件实例,并将目标堆栈中的第四组件实例确定为用于启动第一组件的组件实例,其中,第二类型的组件的组件实例被设置为当第二类型的组件被启动、在目标堆栈中存在第二类型的组件的组件实例、且弹出目标堆栈中位于第二类型的组件的组件实例之上的组件实例时,允许复用目标堆栈中的第二类型的组件的组件实例;
启动目标堆栈中的第四组件实例。
可选地,在本实施例中,上述第二类型可以包括但不限于SingleTask启动的组件,通过判断目标堆栈中的组件实例是否包括SingleTask方式启动的组件实例,确定是否创建新的组件实例或者复用SingleTask启动的组件实例。
例如,图8是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图8所示,以安卓系统为例,StandardA、SingleTaskB以及StandardC为目标堆栈802中已经存在的组件实例,当第一组件的组件类型为SingleTask类型时,查询目标堆栈802中是否存在其它SingleTask方式启动的组件实例,在确定存在SingleTaskB时,将SingleTaskB之上的组件实例弹出,并直接复用目标堆栈802中SingleTaskB组件实例,作为第四组件实例,并将SingleTaskB放入目标堆栈804的栈顶。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第二类型、且目标堆栈中不存在第一组件的组件实例时,创建第一组件对应的第二类型的第五组件实例,并将第五组件实例放入目标堆栈的栈顶;
启动目标堆栈中的第五组件实例。
可选地,在本实施例中,当待启动的自已组件的组件类型为SingleTask方式启动的组件,且目标堆栈中不存在其它SingleTask方式启动的组件实例时,创建SingleTask方式启动的第五组件实例,并将SingleTask方式启动的组件实例放入目标堆栈的栈顶。
可选地,在本实施例中,上述第五组件实例即为图8中目标堆栈802不存在SingleTaskB的堆栈信息时,直接在目标堆栈804默认创建的SingleTaskB组件实例。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第三类型、且系统进程管理的全部堆栈中均不存在第一组件的组件实例时,创建第一组件对应的第三类型的第六组件实例,并将第六组件实例放入新创建的第一堆栈中,其中,第三类型的组件的组件实例被设置为在系统进程管理的全部堆栈中均不存在第三类型的组件的组件实例时,允许创建第三类型的组件的组件实例,并将创建的第三类型的组件的组件实例放入新创建的堆栈中;
启动第一堆栈中的第六组件实例。
可选地,在本实施例中,上述第三类型可以包括但不限于SingleInstance启动的组件,通过判断多个目标堆栈中的组件实例是否包括SingleInstance方式启动的组件实例,确定是否创建新的堆栈以放入组件实例或者复用SingleInstance启动的组件实例。
例如,图9是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图9所示,以安卓系统为例,StandardA、StandardB以及StandardC为目标堆栈902中已经存在的组件实例,当第一组件的组件类型为SingleInstance类型时,查询目标堆栈902中是否存在其它SingleInstance方式启动的组件实例,在确定不存在SingleInstance启动方式的组件实例时,在目标堆栈902之外新建目标堆栈904,并放入第六组件实例SingleInstanceD。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例,包括:
在第一组件的组件类型为第三类型、且系统进程管理的第二堆栈中存在第一组件的第七组件实例时,将第二堆栈中的第七组件实例确定为用于启动第一组件的组件实例,其中,第二堆栈为在获取第一组件的组件类型之前存在的堆栈;
启动第二堆栈中的第七组件实例。
例如,图10是根据本发明实施例的又一种可选的组件的启动方法的示意图,如图10所示,以安卓系统为例,StandardA、StandardB以及为目标堆栈1002中已经存在的组件实例,SingleInstanceD为目标堆栈1004中已经存在的组件实例,当第一组件的组件类型为SingleInstance类型时,查询目标堆栈1002和目标堆栈1004中是否存在任意SingleInstance方式启动的组件实例,在确定存在SingleInstance启动方式的组件实例SingleInstanceD时,复用SingleInstanceD作为上述第七组件实例。
上述仅是一种示例,本实施例不做任何具体的限定。
作为一种可选的方案,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,包括:
根据第一组件的组件类型确定第一组件的复用函数;
根据第一组件的组件类型和目标堆栈的当前堆栈信息确定第一组件是否需要执行复用操作;
在第一组件需要执行复用操作的情况下,调动复用函数为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,在本实施例中,可以包括但不限于根据第一组件的启动类型确定第一组件的复用函数,上述复用函数用于执行复用组件实例的逻辑以实现组件实例的复用。
可选地,在本实施例中,上述根据第一组件的组件类型和目标堆栈的当前堆栈信息确定第一组件是否需要执行复用操作可以包括但不限于判断第一组件的组件类型,在第一组件的组件类型为标准类型的情况下,创建第一组件对应的标准类型的第一组件实例,并将第一组件实例放入目标堆栈的栈顶,其中,标准类型的组件被设置为在被启动时需要创建一个新的组件实例,在第一组件的组件类型为第一类型、且当前堆栈信息表示位于目标堆栈的栈顶的组件实例不是第一组件的组件实例时,创建第一组件对应的第一类型的第二组件实例,并将第二组件实例放入目标堆栈的栈顶,其中,第一类型的组件的组件实例被设置为当第一类型的组件被启动、且第一类型的组件的组件实例位于目标堆栈的栈顶时,允许复用第一类型的组件的组件实例;在第一组件的组件类型为第二类型、且目标堆栈中存在第一组件的第四组件实例时,弹出目标堆栈中位于第四组件实例之上的组件实例,并将目标堆栈中的第四组件实例确定为用于启动第一组件的组件实例,其中,第二类型的组件的组件实例被设置为当第二类型的组件被启动、在目标堆栈中存在第二类型的组件的组件实例、且弹出目标堆栈中位于第二类型的组件的组件实例之上的组件实例时,允许复用目标堆栈中的第二类型的组件的组件实例;在第一组件的组件类型为第三类型、且系统进程管理的全部堆栈中均不存在第一组件的组件实例时,创建第一组件对应的第三类型的第六组件实例,并将第六组件实例放入新创建的第一堆栈中,其中,第三类型的组件的组件实例被设置为在系统进程管理的全部堆栈中均不存在第三类型的组件的组件实例时,允许创建第三类型的组件的组件实例,并将创建的第三类型的组件的组件实例放入新创建的堆栈中。
作为一种可选的方案,方法还包括:
通过目标钩子函数劫持第一组件的启动信息,启动信息用于表示启动的第一组件的组件实例是否是复用的组件实例,目标钩子函数是在第一应用程序的应用进程中预埋的钩子函数;
在启动信息表示启动的第一组件的组件实例是复用的组件实例时,触发执行目标回调函数,以记录复用信息,其中,复用信息表示启动的第一组件的组件实例是复用的组件实例。
可选地,在本实施例中,上述启动信息可以包括但不限于在安卓系统中的startActivity发出的启动Activity的信息,具体而言,可以包括但不限于根据组件类型以及当前堆栈信息确定的是否需要通过复用的方式启动组件实例,上述目标钩子函数可以包括但不限于预埋在每个应用程序中的钩子函数,以用于劫持上述启动信息,上述在启动信息表示启动的第一组件的组件实例是复用的组件实例时,触发执行目标回调函数,以记录复用信息可以包括但不限于通过预埋在每个进程的钩子类,直接反射调用performNewIntents方法,以实现调用onNewIntent回调,进而告知开发者哪些组件实例是复用的组件实例,哪些组件实例是新创建的组件实例,已执行后续处理逻辑。
作为一种可选的方案,在按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件之前,方法还包括:
在第三应用程序内建的虚拟机中运行第一应用程序,其中,第三应用程序运行在目标终端的操作系统中;
获取第一应用程序发送的启动请求,其中,启动请求用于请求启用第一组件。
可选地,在本实施例中,上述第三应用程序可以包括但不限于前述的宿主程序。
下面结合具体的示例,对本实施例进行进一步地解释说明:
例如,以安卓虚拟化框架中进行动态加载的过程中,由于安卓系统只允许在Manifest清单文件中申明过的Activity才能启动。当一个应用程序被安装时,它的Manifest清单会被解析并缓存在PMS中,当一个应用程序需要启动一个Activity时,会请求AMS验证,此时,AMS会查阅该Activity是否存在于Manifest清单中,如果不存在,则抛出未注册异常。
Manifest文件是一份编译期就写好的静态文件,并不能动态添加,所以应用程序在安装过程中就已经决定了配置。虚拟化框架的定义是可以加载任意一款未知的应用程序,所以当虚拟化应用程序想要加载其他应用程序时,往往不知道要加载的应用程序中Activity组件的配置是怎样的,更不能提前将其他应用程序的Activity的配置添加到自己的Manifest中,所以这样会导致虚拟化框架加载其他应用程序失败。
本实施例中,在一个应用进程中只需预埋一个Activity配置,就可以支持所有配置的运行效果,而且可以无限扩充,无需关心配置数量问题,使得Manifest文件只需增加几行代码,不会影响Manifest的可读性,并且对安装速度的影响微乎其微。
首先,应用程序通过静态代理的方式劫持应用进程生命周期处理者H,在H执行原方法之前,多旁落一份回调的数据到模拟的Activity堆栈中,完全模拟系统进程的数据结构和管理方式,使得应用进程可以完全掌握目前Activity的堆栈情况。
其次,通过动态代理的方式,劫持到IActivityManager的startActivity方法,从该方法中获取到ActivityInfo参数,并获取到launchMode字段得知即将要启动的Activity的启动模式。
再次,根据不同配置类型的复用策略和目前堆栈中的情况,判断即将启动的Activity是否被复用。
最后,综合各种启动模式的复用机制,调用各种启动模式的onNewIntent回调。通过预埋在每个进程的钩子类,直接反射调用performNewIntents方法,来触发Activity的onNewIntent()回调。
通过以上步骤,使得应用程序可以使用 Standard启动模式允许至少模拟SingleTop、SingleTask、SingleInstance三种启动模式。
通过本实施例,由于每个进程只需预埋一个Standard配置即可,而且可以无限的复用,不用担心配置不够导致系统崩溃的问题,此外,Manifest.xml配置文件的增量只有几行,可读性几乎无影响,并且,由于总共只增加了一个配置项,对安装解析Manifest过程几乎没有耗时的增加。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
根据本发明实施例的另一个方面,还提供了一种用于实施上述组件的启动方法的组件的启动装置。如图11所示,该装置包括:
模拟模块1102,用于在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;
获取模块1104,用于在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,其中,目标堆栈的当前堆栈信息包括目标终端上的应用程序已创建的一组组件实例,目标堆栈是对目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
处理模块1106,用于根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
作为一种可选的方案,装置还用于:
在目标终端运行的第一应用程序请求启动第一组件之前,在目标终端运行的第二应用程序启动第二组件的过程中,对第二应用程序的第二应用进程的创建信息进行劫持,其中,第二应用进程用于根据系统进程的创建指令创建第二组件的组件实例,创建信息用于表示第二应用进程创建的第二组件的组件实例;
将劫持到的创建信息更新到目标堆栈中,其中,目标堆栈与组件堆栈相同。
作为一种可选的方案,装置用于通过如下方式获取第一组件的组件类型:
对第一应用程序的第一应用进程的组件信息参数进行劫持,得到组件信息参数中的第一组件的组件类型,其中,第一应用进程用于创建第一组件的组件实例,组件信息参数是响应于请求启动第一组件所生成的参数。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为标准类型时,创建第一组件对应的标准类型的第一组件实例,并将第一组件实例放入目标堆栈的栈顶,其中,标准类型的组件被设置为在被启动时需要创建一个新的组件实例;
启动目标堆栈中的第一组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第一类型、且当前堆栈信息表示位于目标堆栈的栈顶的组件实例不是第一组件的组件实例时,创建第一组件对应的第一类型的第二组件实例,并将第二组件实例放入目标堆栈的栈顶,其中,第一类型的组件的组件实例被设置为当第一类型的组件被启动、且第一类型的组件的组件实例位于目标堆栈的栈顶时,允许复用第一类型的组件的组件实例;
启动目标堆栈中的第二组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第一类型、且当前堆栈信息表示位于目标堆栈的栈顶的第三组件实例是第一组件的组件实例时,将第三组件实例确定为用于启动第一组件的组件实例;
启动位于目标堆栈的栈顶的第三组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第二类型、且目标堆栈中存在第一组件的第四组件实例时,弹出目标堆栈中位于第四组件实例之上的组件实例,并将目标堆栈中的第四组件实例确定为用于启动第一组件的组件实例,其中,第二类型的组件的组件实例被设置为当第二类型的组件被启动、在目标堆栈中存在第二类型的组件的组件实例、且弹出目标堆栈中位于第二类型的组件的组件实例之上的组件实例时,允许复用目标堆栈中的第二类型的组件的组件实例;
启动目标堆栈中的第四组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第二类型、且目标堆栈中不存在第一组件的组件实例时,创建第一组件对应的第二类型的第五组件实例,并将第五组件实例放入目标堆栈的栈顶;
启动目标堆栈中的第五组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第三类型、且系统进程管理的全部堆栈中均不存在第一组件的组件实例时,创建第一组件对应的第三类型的第六组件实例,并将第六组件实例放入新创建的第一堆栈中,其中,第三类型的组件的组件实例被设置为在系统进程管理的全部堆栈中均不存在第三类型的组件的组件实例时,允许创建第三类型的组件的组件实例,并将创建的第三类型的组件的组件实例放入新创建的堆栈中;
启动第一堆栈中的第六组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例:
在第一组件的组件类型为第三类型、且系统进程管理的第二堆栈中存在第一组件的第七组件实例时,将第二堆栈中的第七组件实例确定为用于启动第一组件的组件实例,其中,第二堆栈为在获取第一组件的组件类型之前存在的堆栈;
启动第二堆栈中的第七组件实例。
作为一种可选的方案,装置用于通过如下方式根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例:
根据第一组件的组件类型确定第一组件的复用函数;
根据第一组件的组件类型和目标堆栈的当前堆栈信息确定第一组件是否需要执行复用操作;
在第一组件需要执行复用操作的情况下,调动复用函数为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
作为一种可选的方案,装置还用于:
通过目标钩子函数劫持第一组件的启动信息,启动信息用于表示启动的第一组件的组件实例是否是复用的组件实例,目标钩子函数是在第一应用程序的应用进程中预埋的钩子函数;
在启动信息表示启动的第一组件的组件实例是复用的组件实例时,触发执行目标回调函数,以记录复用信息,其中,复用信息表示启动的第一组件的组件实例是复用的组件实例。
作为一种可选的方案,装置还用于:
在按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件之前,在第三应用程序内建的虚拟机中运行第一应用程序,其中,第三应用程序运行在目标终端的操作系统中;
获取第一应用程序发送的启动请求,其中,启动请求用于请求启用第一组件。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序/指令,该计算机程序/指令包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理器1201执行时,执行本申请实施例提供的各种功能。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
图12示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。
需要说明的是,图12示出的电子设备的计算机系统1200仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理器1201(Central Processing Unit,CPU),其可以根据存储在只读存储器1202(Read-Only Memory,ROM)中的程序或者从存储部分1208加载到随机访问存储器1203(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1203中,还存储有系统操作所需的各种程序和数据。中央处理器1201、在只读存储器1202以及随机访问存储器1203通过总线1204彼此相连。输入/输出接口1205(Input /Output接口,即I/O接口)也连接至总线1204。
以下部件连接至输入/输出接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至输入/输出接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理器1201执行时,执行本申请的系统中限定的各种功能。
根据本发明实施例的又一个方面,还提供了一种用于实施上述组件的启动方法的电子设备,该电子设备可以是图1所示的终端设备或服务器。本实施例以该电子设备为终端设备为例来说明。如图13所示,该电子设备包括存储器1302和处理器1304,该存储器1302中存储有计算机程序,该处理器1304被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;
S2,在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,其中,目标堆栈的当前堆栈信息包括目标终端上的应用程序已创建的一组组件实例,目标堆栈是对目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
S3,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,本领域普通技术人员可以理解,图13所示的结构仅为示意,电子装置电子设备也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图13其并不对上述电子装置电子设备的结构造成限定。例如,电子装置电子设备还可包括比图13中所示更多或者更少的组件(如网络接口等),或者具有与图13所示不同的配置。
其中,存储器1302可用于存储软件程序以及模块,如本发明实施例中的组件的启动方法和装置对应的程序指令/模块,处理器1304通过运行存储在存储器1302内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的组件的启动方法。存储器1302可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1302可进一步包括相对于处理器1304远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器1302具体可以但不限于用于组件类型配置等信息。作为一种示例,如图13所示,上述存储器1302中可以但不限于包括上述组件的启动装置中的模拟模块1102、获取模块1104以及处理模块1106。此外,还可以包括但不限于上述组件的启动装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置1306用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1306包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1306为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子设备还包括:显示器1308,用于显示上述组件类型配置;和连接总线1310,用于连接上述电子设备中的各个模块部件。
在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
根据本申请的一个方面,提供了一种计算机可读存储介质,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述组件的启动方面的各种可选实现方式中提供的组件的启动方法。
可选地,在本实施例中,上述计算机可读存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将第一组件模拟成目标组件类型的第一模拟组件,并对目标组件类型的第一模拟组件进行认证;
S2,在对目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取第一组件的组件类型,其中,目标堆栈的当前堆栈信息包括目标终端上的应用程序已创建的一组组件实例,目标堆栈是对目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
S3,根据第一组件的组件类型和目标堆栈的当前堆栈信息,为第一组件配置对应的组件实例,并启动为第一组件配置的组件实例。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (16)
1.一种组件的启动方法,其特征在于,包括:
在目标终端运行的第一应用程序请求启动第一组件时,按照预先设置的目标组件类型配置,将所述第一组件模拟成目标组件类型的第一模拟组件,并对所述目标组件类型的第一模拟组件进行认证;
在对所述目标组件类型的第一模拟组件认证通过的情况下,获取目标堆栈的当前堆栈信息,以及获取所述第一组件的组件类型,其中,所述目标堆栈的当前堆栈信息包括所述目标终端上的应用程序已创建的一组组件实例,所述目标堆栈是对所述目标终端的系统进程管理的组件堆栈模拟得到的堆栈;
根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例。
2.根据权利要求1所述的方法,其特征在于,在所述目标终端运行的所述第一应用程序请求启动所述第一组件之前,所述方法还包括:
在所述目标终端运行的第二应用程序启动第二组件的过程中,对所述第二应用程序的第二应用进程的创建信息进行劫持,其中,所述第二应用进程用于根据所述系统进程的创建指令创建所述第二组件的组件实例,所述创建信息用于表示所述第二应用进程创建的所述第二组件的组件实例;
将劫持到的所述创建信息更新到所述目标堆栈中,其中,所述目标堆栈与所述组件堆栈相同。
3.根据权利要求1所述的方法,其特征在于,所述获取所述第一组件的组件类型,包括:
对所述第一应用程序的第一应用进程的组件信息参数进行劫持,得到所述组件信息参数中的所述第一组件的组件类型,其中,所述第一应用进程用于创建所述第一组件的组件实例,所述组件信息参数是响应于请求启动所述第一组件所生成的参数。
4.根据权利要求1所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为标准类型时,创建所述第一组件对应的所述标准类型的第一组件实例,并将所述第一组件实例放入所述目标堆栈的栈顶,其中,所述标准类型的组件被设置为在被启动时需要创建一个新的组件实例;
启动所述目标堆栈中的所述第一组件实例。
5.根据权利要求1所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为第一类型、且所述当前堆栈信息表示位于所述目标堆栈的栈顶的组件实例不是所述第一组件的组件实例时,创建所述第一组件对应的所述第一类型的第二组件实例,并将所述第二组件实例放入所述目标堆栈的栈顶,其中,所述第一类型的组件的组件实例被设置为当所述第一类型的组件被启动、且所述第一类型的组件的组件实例位于所述目标堆栈的栈顶时,允许复用所述第一类型的组件的组件实例;
启动所述目标堆栈中的所述第二组件实例。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为所述第一类型、且所述当前堆栈信息表示位于所述目标堆栈的栈顶的第三组件实例是所述第一组件的组件实例时,将所述第三组件实例确定为用于启动所述第一组件的组件实例;
启动位于所述目标堆栈的栈顶的所述第三组件实例。
7.根据权利要求1所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为第二类型、且所述目标堆栈中存在所述第一组件的第四组件实例时,弹出所述目标堆栈中位于所述第四组件实例之上的组件实例,并将所述目标堆栈中的所述第四组件实例确定为用于启动所述第一组件的组件实例,其中,所述第二类型的组件的组件实例被设置为当所述第二类型的组件被启动、在所述目标堆栈中存在所述第二类型的组件的组件实例、且弹出所述目标堆栈中位于所述第二类型的组件的组件实例之上的组件实例时,允许复用所述目标堆栈中的所述第二类型的组件的组件实例;
启动所述目标堆栈中的所述第四组件实例。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为所述第二类型、且所述目标堆栈中不存在所述第一组件的组件实例时,创建所述第一组件对应的所述第二类型的第五组件实例,并将所述第五组件实例放入所述目标堆栈的栈顶;
启动所述目标堆栈中的所述第五组件实例。
9.根据权利要求1所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为第三类型、且所述系统进程管理的全部堆栈中均不存在所述第一组件的组件实例时,创建所述第一组件对应的所述第三类型的第六组件实例,并将所述第六组件实例放入新创建的第一堆栈中,其中,所述第三类型的组件的组件实例被设置为在所述系统进程管理的全部堆栈中均不存在所述第三类型的组件的组件实例时,允许创建所述第三类型的组件的组件实例,并将创建的所述第三类型的组件的组件实例放入新创建的堆栈中;
启动所述第一堆栈中的所述第六组件实例。
10.根据权利要求9所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例,包括:
在所述第一组件的组件类型为所述第三类型、且所述系统进程管理的第二堆栈中存在所述第一组件的第七组件实例时,将所述第二堆栈中的所述第七组件实例确定为用于启动所述第一组件的组件实例,其中,所述第二堆栈为在获取所述第一组件的组件类型之前存在的堆栈;
启动所述第二堆栈中的所述第七组件实例。
11.根据权利要求1至10中任一项所述的方法,其特征在于,所述根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息,为所述第一组件配置对应的组件实例,包括:
根据所述第一组件的组件类型确定所述第一组件的复用函数;
根据所述第一组件的组件类型和所述目标堆栈的当前堆栈信息确定所述第一组件是否需要执行复用操作;
在所述第一组件需要执行复用操作的情况下,调动所述复用函数为所述第一组件配置对应的组件实例,并启动为所述第一组件配置的组件实例。
12.根据权利要求1至10中任一项所述的方法,其特征在于,所述方法还包括:
通过目标钩子函数劫持所述第一组件的启动信息,所述启动信息用于表示启动的所述第一组件的组件实例是否是复用的组件实例,所述目标钩子函数是在所述第一应用程序的应用进程中预埋的钩子函数;
在所述启动信息表示启动的所述第一组件的组件实例是复用的组件实例时,触发执行目标回调函数,以记录复用信息,其中,所述复用信息表示启动的所述第一组件的组件实例是复用的组件实例。
13.根据权利要求1至10中任一项所述的方法,其特征在于,在按照预先设置的目标组件类型配置,将所述第一组件模拟成目标组件类型的第一模拟组件之前,所述方法还包括:
在第三应用程序内建的虚拟机中运行所述第一应用程序,其中,所述第三应用程序运行在所述目标终端的操作系统中;
获取所述第一应用程序发送的启动请求,其中,所述启动请求用于请求启用所述第一组件。
14.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序可被终端设备或计算机运行时执行所述权利要求1至13任一项中所述的方法。
15.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1至13任一项中所述方法的步骤。
16.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至13任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111267418.5A CN113703878B (zh) | 2021-10-29 | 2021-10-29 | 组件的启动方法和装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111267418.5A CN113703878B (zh) | 2021-10-29 | 2021-10-29 | 组件的启动方法和装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113703878A CN113703878A (zh) | 2021-11-26 |
CN113703878B true CN113703878B (zh) | 2022-02-22 |
Family
ID=78647448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111267418.5A Active CN113703878B (zh) | 2021-10-29 | 2021-10-29 | 组件的启动方法和装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113703878B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101393535A (zh) * | 2007-09-19 | 2009-03-25 | 国际商业机器公司 | 将运行时事件与组件相关联的方法和系统 |
CN105117243A (zh) * | 2015-07-30 | 2015-12-02 | 北京奇虎科技有限公司 | 一种获取应用程序的启动时间的方法和装置 |
CN108776599A (zh) * | 2018-05-21 | 2018-11-09 | Oppo广东移动通信有限公司 | 预加载应用的管理方法、装置、存储介质及智能终端 |
CN111309445A (zh) * | 2020-03-09 | 2020-06-19 | 腾讯科技(深圳)有限公司 | 程序运行方法和装置及存储介质 |
CN112114890A (zh) * | 2019-06-20 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 小程序的处理方法、装置、设备及存储介质 |
CN112230944A (zh) * | 2020-11-09 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 应用安装方法、装置、电子设备和计算机可读介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9516100B2 (en) * | 2014-02-05 | 2016-12-06 | Travis T. Wilson | Method and system for executing third-party agent code in a data processing system |
CN108614722B (zh) * | 2018-05-10 | 2020-09-08 | 上海瑾盛通信科技有限公司 | 应用程序预加载方法、装置、存储介质及终端 |
US11099974B2 (en) * | 2019-05-23 | 2021-08-24 | International Business Machines Corporation | Cognitive analytics for high-availability application-performance management |
-
2021
- 2021-10-29 CN CN202111267418.5A patent/CN113703878B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101393535A (zh) * | 2007-09-19 | 2009-03-25 | 国际商业机器公司 | 将运行时事件与组件相关联的方法和系统 |
CN105117243A (zh) * | 2015-07-30 | 2015-12-02 | 北京奇虎科技有限公司 | 一种获取应用程序的启动时间的方法和装置 |
CN108776599A (zh) * | 2018-05-21 | 2018-11-09 | Oppo广东移动通信有限公司 | 预加载应用的管理方法、装置、存储介质及智能终端 |
CN112114890A (zh) * | 2019-06-20 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 小程序的处理方法、装置、设备及存储介质 |
CN111309445A (zh) * | 2020-03-09 | 2020-06-19 | 腾讯科技(深圳)有限公司 | 程序运行方法和装置及存储介质 |
CN112230944A (zh) * | 2020-11-09 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 应用安装方法、装置、电子设备和计算机可读介质 |
Non-Patent Citations (1)
Title |
---|
分布式嵌入式系统的自适应能耗管理和分析;范贵生 等;《软件学报》;20140228;第419-425页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113703878A (zh) | 2021-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536519B (zh) | 自动搭建Kubernetes主节点的方法及终端设备 | |
US7823023B2 (en) | Test framework for testing an application | |
CN107534571B (zh) | 用于管理虚拟网络功能的方法、系统和计算机可读介质 | |
US9210162B2 (en) | Certificate based connection to cloud virtual machine | |
US8880864B2 (en) | Parallelizing multiple boot images with virtual machines | |
KR20060051932A (ko) | 소프트웨어를 실행 동안 업데이트하는 시스템, 방법 및컴퓨터-판독가능 매체 | |
US10594800B2 (en) | Platform runtime abstraction | |
CN107203419A (zh) | 应用程序中的模块间调用方法、装置及系统 | |
CN111708702A (zh) | 模拟测试方法、客户端、服务端、系统与可读存储介质 | |
JP2013522769A (ja) | 仮想マシンイメージ更新サービス | |
US20170168807A1 (en) | Method and electronic device for updating application program | |
CN109104368B (zh) | 一种请求连接方法、装置、服务器及计算机可读存储介质 | |
US11263297B2 (en) | Dynamic insertion of variablized secrets in a pipeline integration system | |
US8364945B2 (en) | Provisioning an unknown computer system | |
US20220038444A1 (en) | Cloud device, application processing method, electronic device and storage medium | |
CN113360214A (zh) | 一种应用程序功能模块的动态插拔方法及系统 | |
CN113703878B (zh) | 组件的启动方法和装置、存储介质及电子设备 | |
CN109992298B (zh) | 审批平台扩充方法、装置、审批平台及可读存储介质 | |
CN109388770B (zh) | Web页面生成方法及装置 | |
CN114422358A (zh) | Api网关配置更新方法及设备 | |
CN113986423A (zh) | 一种弹框显示方法、系统及存储介质和终端设备 | |
CN115857878A (zh) | 一种开发框架生成方法及应用方法 | |
CN108134683B (zh) | 一种终端及总线架构的实现方法 | |
CN111262961A (zh) | 一种云平台资源管理方法、装置和电子设备 | |
CN110059125B (zh) | 一种代理合约调用的方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |