CN115934206A - 应用启动方法、装置、电子设备和存储介质 - Google Patents
应用启动方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115934206A CN115934206A CN202310003886.4A CN202310003886A CN115934206A CN 115934206 A CN115934206 A CN 115934206A CN 202310003886 A CN202310003886 A CN 202310003886A CN 115934206 A CN115934206 A CN 115934206A
- Authority
- CN
- China
- Prior art keywords
- application
- target
- code
- account
- space
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开关于应用启动方法、装置、电子设备和存储介质,包括:在通过目标账号执行第一应用的过程中,接收针对目标第二应用的启动指令;响应于启动指令,查询目标账号的目标账号空间;在目标账号空间不存在目标第二应用的代码包的情况下,执行应用空间内的目标第二应用的代码包以启动目标第二应用。通过隔离管理的方式,可以保证不同账号空间内的第二应用的代码包相互独立,避免出现某个账号的错误操作导致其他账号无法打开第二应用的情况,容错性较好。并且,与第一应用关联的所有账号可以共享应用空间中的可执行的代码包,避免出现不同账号重复下载同一份代码包的情况,可以节省带宽资源和存储资源。
Description
技术领域
本公开涉及计算机技术领域,更具体地说,涉及应用启动方法、装置、电子设备和存储介质。
背景技术
“小程序”是一种不需要下载安装即可使用的应用程序,它允许开发者在宿主应用程序内部运行自己的代码,开展业务。针对终端上的同一个宿主应用程序,终端的用户可能存在多个账号;或者,可以在同一个终端上的宿主应用程序上切换登录不同用户的账号。
“小程序”需要依赖没有问题的“代码包”才能正常打开,如果小程序的代码包存在错误,是无法正常打开小程序的。相关技术中,同一个宿主应用程序的多个账号均混用同一份小程序的代码包,如果某个账号在使用小程序的代码包的过程中出现了某些错误操作,该错误操作会导致小程序的代码包受到污染,进而会导致所有账号都无法正常打开小程序,打开小程序的容错性较差。
发明内容
本公开提供应用启动方法、装置、电子设备和存储介质,以至少解决上述相关技术中,打开小程序的容错性较差的问题。
根据本公开实施例的第一方面,提供一种应用启动方法,应用于终端,包括:在通过目标账号执行第一应用的过程中,接收针对目标第二应用的启动指令,其中,所述第一应用是第二应用的宿主应用,所述目标第二应用为所述第二应用之一,与所述第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,所述第一应用具有用于管理与所述第一应用关联的所有账号所关联的第二应用的代码包的应用空间,所述目标账号为所述所有账号之一;响应于所述启动指令,查询所述目标账号的目标账号空间;在所述目标账号空间不存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:在所述应用空间存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用;在所述应用空间不存在所述目标第二应用的代码包的情况下,从服务器下载所述目标第二应用的代码包至所述应用空间;执行下载至所述应用空间的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述执行下载至所述应用空间的所述目标第二应用的代码包以启动所述目标第二应用,包括:在执行下载至所述应用空间的所述目标第二应用的代码包出现错误的情况下,持续从所述服务器下载并执行所述目标第二应用的代码包,直至成功启动所述目标第二应用;删除所述应用空间内出现错误的所述目标第二应用的代码包。
可选地,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:将所述应用空间中存储的所述目标第二应用的代码包拷贝至所述目标账号空间内,并执行拷贝至所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:在所述目标账号空间内创建指向信息,其中,所述指向信息用于从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包;通过访问所述指向信息,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述指向信息为从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包的第一链接,或者,为包含所述目标第二应用的代码包在所述应用空间中的存储路径的文本文件。
可选地,在所述接收针对目标第二应用的启动指令之后,还包括:从服务器获取所述目标第二应用的代码包的目标版本号以及第二链接;在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号小于所述目标版本号的情况下,在所述第一应用不存在网络请求时,通过访问所述第二链接从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包;在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号等于所述目标版本号的情况下,禁止从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包。
可选地,还包括:在所述所有账号中的第一账号的第一账号空间内存储的所述第二应用的代码包过期的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除;和/或,在所述应用空间内存储的所述第二应用的代码包过期的情况下,将所述应用空间内所存储的已经过期的所述第二应用的代码包删除。
可选地,还包括:在所述第二应用的代码包的未被使用的持续时长超过预设时长的情况下,确定所述第二应用的代码包过期。
可选地,还包括:在所述第一应用的冷启动过程中,检测所述所有账号中每个账号的账号空间内所存储的所述第二应用的代码包是否过期。
可选地,所述将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除,包括:在所述第一应用处于休眠状态的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除。
可选地,还包括:在所述目标账号空间存在所述目标第二应用的代码包的情况下,执行所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
根据本公开实施例的第二方面,提供一种应用启动装置,应用于终端,包括:启动指令接收模块,被配置为在通过目标账号执行第一应用的过程中,接收针对目标第二应用的启动指令,其中,所述第一应用是第二应用的宿主应用,所述目标第二应用为所述第二应用之一,与所述第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,所述第一应用具有用于管理与所述第一应用关联的所有账号所关联的第二应用的代码包的应用空间,所述目标账号为所述所有账号之一;账号空间查询模块,被配置为响应于所述启动指令,查询所述目标账号的目标账号空间;第一执行模块,被配置为在所述目标账号空间不存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述第一执行模块被配置为:在所述应用空间存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用;在所述应用空间不存在所述目标第二应用的代码包的情况下,从服务器下载所述目标第二应用的代码包至所述应用空间;执行下载至所述应用空间的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述第一执行模块被配置为:在执行下载至所述应用空间的所述目标第二应用的代码包出现错误的情况下,持续从所述服务器下载并执行所述目标第二应用的代码包,直至成功启动所述目标第二应用;删除所述应用空间内出现错误的所述目标第二应用的代码包。
可选地,所述第一执行模块被配置为:将所述应用空间中存储的所述目标第二应用的代码包拷贝至所述目标账号空间内,并执行拷贝至所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述第一执行模块被配置为:在所述目标账号空间内创建指向信息,其中,所述指向信息用于从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包;通过访问所述指向信息,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
可选地,所述指向信息为从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包的第一链接,或者,为包含所述目标第二应用的代码包在所述应用空间中的存储路径的文本文件。
可选地,所述应用启动装置还包括:版本号和链接获取模块,被配置为从服务器获取所述目标第二应用的代码包的目标版本号以及第二链接;下载模块,被配置为在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号小于所述目标版本号的情况下,在所述第一应用不存在网络请求时,通过访问所述第二链接从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包;禁止模块,被配置为在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号等于所述目标版本号的情况下,禁止从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包。
可选地,所述应用启动装置还包括:第一删除模块,被配置为在所述所有账号中的第一账号的第一账号空间内存储的所述第二应用的代码包过期的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除;和/或,第二删除模块,被配置为在所述应用空间内存储的所述第二应用的代码包过期的情况下,将所述应用空间内所存储的已经过期的所述第二应用的代码包删除。
可选地,所述应用启动装置还包括:过期确定模块,被配置为在所述第二应用的代码包的未被使用的持续时长超过预设时长的情况下,确定所述第二应用的代码包过期。
可选地,所述应用启动装置还包括:检测模块,被配置为在所述第一应用的冷启动过程中,检测所述所有账号中每个账号的账号空间内所存储的所述第二应用的代码包是否过期。
可选地,所述第一删除模块被配置为在所述第一应用处于休眠状态的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除。
可选地,所述应用启动装置还包括:第二执行模块,被配置为在所述目标账号空间存在所述目标第二应用的代码包的情况下,执行所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现根据本公开的应用启动方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行根据本公开的应用启动方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机指令,所述计算机指令被至少一个处理器执行时实现根据本公开的应用启动方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
本公开中,与第一应用关联的所有账号中每个账号均对应有各自的账号空间,当出现账号登录、账号注销或者账号切换时,第二应用可以运行在不同的账号空间中,可以确保不同账号之间的数据相互隔离,互不影响。即通过隔离管理的方式,可以保证不同账号空间内的第二应用的代码包相互独立,可以避免出现某个账号的错误操作导致其他账号无法正常打开第二应用的情况,打开小程序的容错性较好。
并且,每个第一应用还可以对应有一个应用空间,该应用空间用于存放所有第二应用的可执行的代码包,与账号概念无关。即与第一应用关联的所有账号可以共享应用空间中的可执行的代码包,避免出现不同账号重复下载同一份第二应用的代码包的情况,可以避免代码包的重复下载所带来的带宽和流量的浪费,还可以避免重复下载的代码包对终端的磁盘空间的浪费,可以节省带宽资源和存储资源。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是示出相关技术中一种启动并使用小程序的流程示意图;
图2是示出相关技术中一种小程序的包管理模块的功能示意图;
图3是示出相关技术中一种单个小程序的启动流程示意图;
图4是示出相关技术中一种多个账号混用同一份小程序的代码包的示意图;
图5是示出相关技术中一种不同账号各自拥有独立的账号空间的示意图;
图6是示出根据本公开的示例性实施例的一种应用启动方法的流程图;
图7是示出根据本公开的示例性实施例的一种单个账号的账号空间的示意图;
图8是示出根据本公开的示例性实施例的一种切换不同登录账号的示意图;
图9是示出根据本公开的示例性实施例的一种通过指向信息从账号空间指向代码仓库中的实际代码包文件的示意图;
图10是示出根据本公开的示例性实施例的一种账号空间、代码仓库、淘汰机制的示意图;
图11是示出根据本公开的示例性实施例的一种小程序的启动流程中获取小程序的代码包的示意图;
图12是示出根据本公开的示例性实施例的一种多个账号共享代码仓库中所存放的小程序的代码包的示意图;
图13是示出根据本公开的示例性实施例的一种代码包的淘汰示意图;
图14是示出根据本公开的示例性实施例的一种代码包淘汰异常情况的示意图;
图15是示出根据本公开的示例性实施例的一种代码包的使用过程和淘汰过程的示意图;
图16是示出根据本公开的示例性实施例的一种应用启动装置的框图;
图17是示出根据本公开的示例性实施例的一种电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在此需要说明的是,在本公开中出现的“若干项之中的至少一项”均表示包含“该若干项中的任意一项”、“该若干项中的任意多项的组合”、“该若干项的全体”这三类并列的情况。例如“包括A和B之中的至少一个”即包括如下三种并列的情况:(1)包括A;(2)包括B;(3)包括A和B。又例如“执行步骤一和步骤二之中的至少一个”,即表示如下三种并列的情况:(1)执行步骤一;(2)执行步骤二;(3)执行步骤一和步骤二。
“小程序”是一种不需要下载安装即可使用的应用程序,它允许开发者在宿主应用程序内部运行自己的代码,开展业务。即“小程序”是一种全新的移动端动态化页面实现方式,依托宿主应用程序可以获得比网页更好的使用体验;“代码包”是提供小程序功能的代码集合,不同小程序独有各自的代码包。“包管理模块”是指为小程序的代码包提供下载、存储、使用和删除等能力的抽象模块;“宿主应用程序”是小程序依托的移动端应用程序,例如,社交应用程序之于社交小程序,视频应用程序之于视频小程序等等。
伴随小程序生态的日益完善,在线上运行的小程序越来越多,每天都有大量的小程序运行在无数个移动端设备上,小程序的运行背后是代码包中代码的执行。图1是示出相关技术中一种启动并使用小程序的流程示意图。参照图1,展示了代码包在小程序运行过程中的作用。
在步骤101中,可以启动小程序。
在步骤102中,可以打开小程序的代码包,并读取小程序的代码包中小程序的图标。
在步骤103中,可以在小程序的启动页面上展示小程序的图标。
在步骤104中,可以打开代码包,并读取小程序的首页代码。
在步骤105中,可以渲染小程序的首页。
在步骤106中,用户可以点击小程序的首页中的某个按钮。
在步骤107中,可以打开代码包,并读取小程序的子页面的代码。
在步骤108中,可以渲染小程序的子页面并进行跳转。
当数以亿计的代码包被下载、解压、解析和运行时,具体到某个移动端设备上,发挥作用的就是小程序的代码包的管理能力。具体来说,代码包的管理能力大体上可以分为两部分:“下载”和“存取”。其中,“下载”是指将代码包从网络中下载并解压到客户端;“存取”则指提供本地结构化目录对代码包进行持久化存储,以及在使用时对目录中的代码包进行读取。
小程序类似移动端的应用程序具有版本属性,同一个小程序不同版本的代码包即表达出不同版本的功能。一般来说,小程序的代码包的版本号随时间逐渐增加,例如,可以从1.0版本到2.0版本。新版本的代码包会提供旧版本的代码包不具备的功能,或者,可以解决旧版本的代码包存在的缺陷,这种版本号的增加称为代码包的升级。一旦某个小程序的代码包升级到新版本,这些新版本的代码包需要被重新下载到客户端中才能完成实际上的小程序“升级”,这个能力也由小程序的“包管理模块”提供。
如前所述,小程序的包管理能力需要提供基本的“下载”和“存取”两大能力。图2是示出相关技术中一种小程序的包管理模块的功能示意图。参照图2,小程序的包管理模块可以对不同的小程序的代码包提供下载和存取服务,即小程序的包管理模块主要包含两大组件“下载器”和“存取器”。当某个小程序被用户打开时,例如,如果用户打开了图2中的小程序A、小程序B、小程序C、小程序D中的小程序A,则需要使用对应的代码包,此时,包管理模块开始工作。
首先,包管理模块可以通知下载器对代码包进行下载,下载器在收到下载任务后并不会立马进行下载,而是可以从存取器中检查对应的代码包是否曾经下载过并保存在本地。如果对应的代码包曾经下载过并保存在本地,则可以直接由存取器将代码包从本地读取并交由包管理模块;否则,下载器才会真正从服务器下载代码包,并且,下载完成后可以将下载好的代码包交由存取器保存至本地,以供下次使用。
图2从总体上描述了小程序的代码包的管理能力的组成部分,而对于某个具体的小程序,它的代码包经由包管理模块管理的流程则如图3所示。参照图3,图3是示出相关技术中一种单个小程序的启动流程示意图。
在步骤301中,可以打开小程序。
在步骤302中,可以检查当前是否存在新版本的代码包,该步骤可以由额外的网络请求完成。
在步骤303中,如果存在新版本的代码包,则可以直接下载并执行新版本的代码包。
在步骤304中,如果不存在新版本的代码包,则可以检查本地是否存在代码包。
在步骤305中,如果本地存在代码包,则可以直接执行该代码包。
在步骤306中,如果本地不存在代码包,则可以从服务器下载并执行代码包。
相关技术中的上述方案为小程序提供了最基础的包管理能力,然而却有两个明显的缺点。其中一个缺点为:相关技术中的方案在启动某个小程序时如果发现有新版本的代码包,就会立刻触发对新版本的代码包的下载,需要等待新版本的代码包下载完成后再进行启动流程。这样虽然可以确保小程序每次打开时都是使用最新版本,但是却会造成启动缓慢。
另一个缺点为:相关技术中的方案没有考虑多账号的场景,目前大部分客户端程序都支持多账号切换能力,而小程序依托于此也应该具有多账号切换能力。这体现在宿主应用程序上不同的账号可能会使用不同的小程序,则小程序的包管理模块应该具备为不同账号提供不同的小程序的代码包的管理能力。如果多个账号混用同一份小程序的代码包,一旦某个账号在使用小程序的代码包的过程中出现了某些错误操作,该错误操作会导致小程序的代码包受到污染,进而会导致所有账号都无法正常打开小程序,打开小程序的容错性较差。
图4是示出相关技术中一种多个账号混用同一份小程序的代码包的示意图。参照图4,终端的用户在同一个宿主应用程序上可以存在3个登录账号,分别为登录账号1、登录账号2和登录账号3;该宿主应用程序可以关联4个小程序,分别为小程序A、小程序B、小程序C和小程序D。如果登录账号1下载小程序A的代码包时出现错误,导致小程序A的代码包无法正常工作,后续如果登录账号3也需要打开小程序A,则会受到影响而无法正常打开小程序A。
为了解决上述打开小程序的容错性较差的技术问题,相关技术增加了多账号切换的能力,不同账号拥有独立的账号空间,相互之间不再共享代码包。图5是示出相关技术中一种不同账号各自拥有独立的账号空间的示意图。参照图5,一共示出了3个登录账号的账号空间,分别为账号空间1、账号空间2和账号空间3。账号空间1中存放了小程序A的代码包和小程序B的代码包;账号空间2中存放了小程序A的代码包、小程序C的代码包和小程序D的代码包;账号空间3中存放了小程序C的代码包和小程序E的代码包。
图5中的3个账号空间中的代码包相互独立,如果登录账号1下载并使用过小程序A的代码包,当登录账号2打开小程序A时,会对小程序A的代码包进行重新下载。该方案通过隔离管理,不同账号具有独立的账号空间,可以避免一个账号对其他账号造成影响。但是,该方案实际上会带来代码包重复下载的问题。例如,登录账号1已经下载并使用过小程序A的代码包,当登录账号2打开小程序A时仍然会重新下载小程序A的代码包,这种重复下载会导致带宽和流量的浪费,并且在终端设备上存储多份相同的代码包也会造成磁盘空间的浪费。
为了解决相关技术中存在的上述问题,本公开提供的应用启动方法,与第一应用关联的所有账号中每个账号均对应有各自的账号空间,当出现账号登录、账号注销或者账号切换时,第二应用可以运行在不同的账号空间中,可以确保不同账号之间的数据相互隔离,互不影响。即通过隔离管理的方式,可以保证不同账号空间内的第二应用的代码包相互独立,可以避免出现某个账号的错误操作导致其他账号无法正常打开第二应用的情况,打开小程序的容错性较好。
并且,每个第一应用还可以对应有一个应用空间,该应用空间用于存放所有第二应用的可执行的代码包,与账号概念无关。即与第一应用关联的所有账号可以共享应用空间中的可执行的代码包,避免出现不同账号重复下载同一份第二应用的代码包的情况,可以避免代码包的重复下载所带来的带宽和流量的浪费,还可以避免重复下载的代码包对终端的磁盘空间的浪费,可以节省带宽资源和存储资源。
图6是示出根据本公开的示例性实施例的一种应用启动方法的流程图,应用于终端。
参照图6,在步骤601中,在通过目标账号执行第一应用的过程中,可以接收针对目标第二应用的启动指令。其中,第一应用是第二应用的宿主应用,即第二应用可以为宿主应用的小程序,目标第二应用可以为第二应用之一。与第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,第一应用具有用于管理与第一应用关联的所有账号所关联的第二应用的代码包的应用空间,该应用空间还可以称为“代码仓库”。目标账号可以为所有账号之一,且目标账号即为第一应用的当前登录账号。
例如,在通过当前登录账号执行宿主应用的过程中,即终端的屏幕上当前显示宿主应用的界面时,用户可以用手指在终端的屏幕上下滑一下,此时,可以显示宿主应用所关联的多个小程序中每个小程序的图标。如果用户点击了多个小程序中某个小程序的图标,终端就会接收到针对该被点击的小程序的启动指令。
根据本公开的示例性实施例,在接收针对目标第二应用的启动指令之后,还可以从服务器获取目标第二应用的代码包的目标版本号以及第二链接,其中,该第二链接用于指示目标第二应用的代码包在服务器上的存储网址,即该第二链接用于指示小程序的代码包在服务器上的存储网址。
在目标账号的目标账号空间内存储的目标第二应用的代码包的本地版本号小于目标版本号的情况下,在第一应用不存在网络请求时,即在宿主应用处于空闲状态时,可以通过访问第二链接从服务器下载版本号为目标版本号的目标第二应用的代码包,即可以通过访问第二链接从服务器下载版本号为目标版本号的小程序的代码包。
在目标账号空间内存储的目标第二应用的代码包的本地版本号等于目标版本号的情况下,即在当前登录账号的账号空间内存储的小程序的代码包的本地版本号等于目标版本号的情况下,说明服务器侧没有更新版本的代码包,因此,可以禁止从服务器下载版本号为目标版本号的目标第二应用的代码包,即可以禁止从服务器下载已经被下载过的小程序的代码包。
这样,在目标账号空间内存储的本地版本号小于目标版本号的情况下,说明服务器侧存在新版本的代码包,此时,如果立刻触发对新版本的代码包的下载,需要等待下载完成后再利用新版本的代码包执行小程序的启动流程,这会造成小程序启动缓慢。因此,在本公开中,可以等待第一应用不存在网络请求时,即只有在宿主应用处于空闲状态时,才会从服务器下载新版本的代码包,可以避免出现直接下载新版本的代码包导致小程序的打开速度过慢的情况,即可以避免出现小程序启动缓慢的情况,可以保证小程序更快的被打开,保证了小程序的打开效率。
在步骤602中,响应于接收到的启动指令,可以查询目标账号的目标账号空间。例如,响应于启动指令,可以查询当前登录账号的账号空间。
根据本公开的示例性实施例,在目标账号空间存在目标第二应用的代码包的情况下,可以执行目标账号空间内的目标第二应用的代码包以启动目标第二应用,即在当前登录账号的账号空间存在小程序的代码包的情况下,可以执行当前登录账号的账号空间内的小程序的代码包以启动小程序。
图7是示出根据本公开的示例性实施例的一种单个账号的账号空间的示意图。参照图7,示出了登录账号1的账号空间,该账号空间主要可以由两部分构成,分别为“小程序空间”和“数据库空间”。“小程序空间”是小程序的代码包和小程序的数据的存储空间,其中,“小程序的数据”可以包含小程序的临时数据以及持久化数据。
在图7中,“小程序空间”一共存放了2个小程序的相关信息,分别为小程序A的相关信息以及小程序B的相关信息。其中,小程序A的相关信息包含了3个版本的代码包以及小程序A的数据。并且,小程序A的3个版本的代码包分别为版本号为1.0的代码包、版本号为2.0的代码包以及版本号为3.0的代码包,小程序A的数据包含小程序A的临时数据和持久化数据;小程序B的相关信息包含了2个版本的代码包以及小程序B的数据。并且,小程序B的2个版本的代码包分别为版本号为1.0的代码包以及版本号为2.0的代码包,小程序B的数据包含小程序B的临时数据和持久化数据。
图7中的“数据库空间”可以存放多个小程序中每个小程序的各个版本的代码包的元数据,其中,“代码包的元数据”可以包含代码包的版本号、代码包的资源链接等等。其中,“代码包的资源链接”是指代码包在服务器上的存储网址。例如,图7中的“数据库空间”可以存放小程序A的3个版本号:1.0、2.0、3.0,以及小程序A的每个版本的代码包的资源链接;并且,图7中的“数据库空间”还可以存放小程序B的2个版本号:1.0、2.0,以及小程序B的每个版本的代码包的资源链接。
图8是示出根据本公开的示例性实施例的一种切换不同登录账号的示意图。参照图8,示出了匿名登录账号、登录账号1和登录账号2。当出现账号登录、账号注销或者账号切换时,小程序的运行环境会运行在不同的账号空间中,确保不同账号之间的数据相互隔离,互不影响。其中,“匿名登录账号”的账号空间指未登录宿主应用状态下的一种特殊账号空间,即共享空间。就是说如果某一个APP它支持不登录也能使用,那么此时可以存在这种与账号概念无关的共享空间来存放宿主应用的多个小程序中每个小程序的代码包、临时数据、持久化数据、代码包的版本号以及代码包的资源链接等与小程序相关的信息。
这样,与第一应用关联的所有账号中每个账号均对应有各自的账号空间,当出现账号登录、账号注销或者账号切换时,第二应用可以运行在不同的账号空间中,可以确保不同账号之间的数据相互隔离,互不影响。即通过隔离管理的方式,可以保证不同账号空间内的第二应用的代码包相互独立,可以避免出现某个账号的错误操作导致其他账号无法正常打开第二应用的情况,打开小程序的容错性较好。
在步骤603中,在目标账号空间不存在目标第二应用的代码包的情况下,可以执行应用空间内的目标第二应用的代码包以启动目标第二应用。即在目标账号空间不存在目标第二应用的代码包的情况下,可以查询第一应用的应用空间,也即在当前登录账号的账号空间不存在小程序的代码包的情况下,可以查询宿主应用的代码仓库。其中,“代码仓库”可以为中心化的小程序的代码包的存储机制,该“代码仓库”用于存放所有小程序的可执行的代码包,与账号概念无关。即与宿主应用关联的所有账号可以共享“代码仓库”中的可执行的代码包。
根据本公开的示例性实施例,在应用空间存在目标第二应用的代码包的情况下,可以执行应用空间内的目标第二应用的代码包以启动目标第二应用,即在代码仓库存在小程序的代码包的情况下,可以执行代码仓库内的小程序的代码包以启动小程序。
在应用空间不存在目标第二应用的代码包的情况下,从可以服务器下载目标第二应用的代码包至应用空间,并可以执行下载至应用空间的目标第二应用的代码包以启动目标第二应用。即在代码仓库不存在小程序的代码包的情况下,可以从服务器下载并执行小程序的代码包以启动小程序。
根据本公开的示例性实施例,所有账号中每个账号的账号空间内可以存储有第二应用的被下载至终端的各个版本的代码包的版本号。在目标账号空间不存在目标第二应用的代码包的情况下,可以基于目标账号空间内存储的目标第二应用的代码包的第一版本号,查询应用空间内是否存在版本号为第一版本号的目标第二应用的代码包。
其中,第二应用的各个版本的代码包被从服务器下载至终端之后,第二应用的该版本的代码包的版本号会被同步至所有账号中每个账号的账号空间。例如,假设某个宿主应用一共存在3个登录账号,分别为登录账号1、登录账号2、登录账号3。该宿主应用的多个小程序中某个小程序的版本号为12.0的代码包被从服务器下载至终端之后,则该代码包的版本号12.0会被同步至登录账号1的账号空间、登录账号2的账号空间、登录账号3的账号空间。
在应用空间存在版本号为第一版本号的目标第二应用的代码包的情况下,可以执行应用空间内的版本号为第一版本号的目标第二应用的代码包以启动目标第二应用,即在代码仓库存在版本号为第一版本号的小程序的代码包的情况下,可以执行代码仓库内的版本号为第一版本号的小程序的代码包以启动小程序。这样,通过将被下载至终端的代码包的版本号同步至宿主应用的所有账号的账号空间,便于当前登录账号了解历史过程中到底有哪些版本的代码包被下载过,进而方便当前登录账号以账号空间内的至少一个版本号为索引,从代码仓库中查询相应版本号的代码包。
根据本公开的示例性实施例,可以将应用空间中存储的目标第二应用的代码包拷贝至目标账号空间内,并执行拷贝至目标账号空间内的目标第二应用的代码包以启动目标第二应用,即可以将代码仓库中存储的小程序的代码包拷贝至当前登录账号的账号空间内,并执行拷贝至当前登录账号的账号空间内的小程序的代码包以启动小程序。
需要说明的是,如果每次都将代码仓库中存储的小程序的代码包拷贝至当前登录账号的账号空间内,并执行拷贝至当前登录账号的账号空间内的小程序的代码包以启动小程序的话,会造成对终端的磁盘空间的过多占用。例如,假设一个代码包的大小为两兆(2M),如果宿主应用的n个账号中每个账号均将代码仓库中存储的小程序的代码包拷贝至该账号的账号空间内以启动小程序,则终端上需要存储(n+1)个代码包,其中,“(n+1)”中的1表示代码仓库中存储的代码包,此时,终端上存储的(n+1)个代码包的大小为:(n+1)×2M。并且,宿主应用所关联的账号越多,即n的取值越大,就会从代码仓库中拷贝出越多的代码包,这会造成对终端的磁盘空间的无限制占用,造成磁盘空间的过多浪费。
因此,本公开提可以提供一种“替身”机制,即可以在账号空间内创建代码仓库中所存放的代码包的“替身”,这个“替身”指向代码仓库中的某个实际的代码包文件,当需要使用代码包时,可以根据“替身”来代码仓库中查找到实际的代码包文件。并且,这个代码包的“替身”的大小远远小于代码包本身的大小,即代码包的“替身”所占用的文件空间很小。这样,针对同一份代码包,假设该代码包的大小为两兆(2M),如果使用了“替身”机制,则终端上存储的仅仅为一个大小为2M的实际的代码包文件以及n个很小的“替身”,就是说n个账号空间加上代码仓库所存储的该代码包的总体积不会变成(n+1)×2M,而仅仅是两兆大小加上n个非常小的代码包的“替身”的体积。
根据本公开的示例性实施例,可以在目标账号空间内创建指向信息,其中,该指向信息用于从目标账号空间指向应用空间中存储的目标第二应用的代码包。即可以在当前登录账号的账号空间内创建指向信息,该指向信息用于从当前登录账号的账号空间指向代码仓库中存储的小程序的代码包,该“指向信息”即为前述代码包的“替身”。
图9是示出根据本公开的示例性实施例的一种通过指向信息从账号空间指向代码仓库中的实际代码包文件的示意图。参照图9,一共示出了2个账号空间,分别为账号空间1和账号空间2。账号空间1内存储了小程序A的3个版本的代码包的指向信息,分别为版本号为1.0的代码包的指向信息、版本号为2.0的代码包的指向信息、版本号为3.0的代码包的指向信息;账号空间2内存储了小程序A的2个版本的代码包的指向信息,分别为:版本号为2.0的代码包的指向信息、版本号为3.0的代码包的指向信息,并且,账号空间2内存储了小程序B的3个版本的代码包的指向信息,分别为版本号为1.0的代码包的指向信息、版本号为2.0的代码包的指向信息、版本号为3.0的代码包的指向信息。
图9中的代码仓库存储了4个小程序中每个小程序的各个版本的代码包:小程序A的版本号为1.0、2.0、3.0的3个版本的代码包;小程序B的版本号为1.0、2.0、3.0的3个版本的代码包;小程序C的版本号为1.0的1个版本的代码包;小程序D的版本号为1.0、2.0的2个版本的代码包。
参照图9,账号空间1内存储的小程序A的版本号为1.0的代码包的指向信息,指向了代码仓库中存储的小程序A的版本号为1.0的实际代码包文件;账号空间1内存储的小程序A的版本号为2.0的代码包的指向信息,指向了代码仓库中存储的小程序A的版本号为2.0的实际代码包文件;账号空间1内存储的小程序A的版本号为3.0的代码包的指向信息,指向了代码仓库中存储的小程序A的版本号为3.0的实际代码包文件。
账号空间2内存储的小程序A的版本号为2.0的代码包的指向信息,指向了代码仓库中存储的小程序A的版本号为2.0的实际代码包文件;账号空间2内存储的小程序A的版本号为3.0的代码包的指向信息,指向了代码仓库中存储的小程序A的版本号为3.0的实际代码包文件。
账号空间2内存储的小程序B的版本号为1.0的代码包的指向信息,指向了代码仓库中存储的小程序B的版本号为1.0的实际代码包文件;账号空间2内存储的小程序B的版本号为2.0的代码包的指向信息,指向了代码仓库中存储的小程序B的版本号为2.0的实际代码包文件;账号空间2内存储的小程序B的版本号为3.0的代码包的指向信息,指向了代码仓库中存储的小程序B的版本号为3.0的实际代码包文件。
然后,可以通过访问指向信息,执行应用空间内的目标第二应用的代码包以启动目标第二应用,即可以通过访问代码包的“替身”,执行代码仓库内的小程序的代码包以启动小程序。这样,相比于每次都将代码仓库中存储的小程序的代码包拷贝至账号空间内以启动小程序的方式,通过在账号空间内设置代码包的“替身”,可以大大减少同一份代码包的多次拷贝对终端的磁盘空间的过多占用,可以大大节省存储资源。
根据本公开的示例性实施例,指向信息可以为从目标账号空间指向应用空间中存储的目标第二应用的代码包的第一链接。其中,“第一链接”可以为“软链接”的形式,“软链接”是一种操作系统的概念,又叫符号链接,这个“软链接”文件包含了另一个文件的路径名,可以链接不同文件系统的文件。软链接文件只是其源文件的一个标记,当删除了源文件后,软链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。在对符号链接文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,例如,在对符号链接文件进行读或写操作的时候,系统会自动把该操作转换为对代码仓库中实际的代码包文件的操作。但删除软链接文件时,系统仅仅删除软链接文件,而不删除源文件本身。
或者,指向信息还可以为包含目标第二应用的代码包在应用空间中的存储路径的文本文件,即指向信息还可以为包含小程序的代码包在代码仓库中的存储路径的文本文件,读取这个文本文件中的存储路径之后,就可以访问这个存储路径下的实际代码包文件。
本公开提供的应用启动方法从逻辑上整体可以分为账号空间、代码仓库、淘汰机制三个部分。
图10是示出根据本公开的示例性实施例的一种账号空间、代码仓库、淘汰机制的示意图。参照图10,一共示出了2个账号空间,分别为账号空间1和账号空间2。本公开中的账号空间是宿主应用程序上为小程序开辟的专用空间,每个账号拥有其独立的账号空间。
账号空间1中存储了3个小程序的相关信息,分别为小程序A的相关信息、小程序B的相关信息、小程序C的相关信息;账号空间2中存储了4个小程序的相关信息,分别为小程序B的相关信息、小程序C的相关信息、小程序D的相关信息、小程序E的相关信息。其中,小程序的相关信息可以包含小程序的代码包、小程序的代码包的“替身”、临时数据、持久化数据、代码包的版本号、代码包的资源链接等等。
本公开的代码仓库是一种中心化的小程序代码包存储机制,代码仓库中存放所有小程序的代码包,与账号的概念无关。参照图10,代码仓库中存储了3个小程序中每个小程序各个版本的代码包,分别为:小程序A的版本号为1.0的代码包、小程序A的版本号为2.0的代码包、小程序A的版本号为3.0的代码包、小程序A的版本号为4.0的代码包;小程序B的版本号为1.0的代码包、小程序B的版本号为2.0的代码包;小程序C的版本号为1.0的代码包。
当任意账号打开小程序时,首先会从该账号的账号空间内查找该小程序的代码包是否存在。如果该账号的账号空间内不存在该小程序的代码包,则可以从代码仓库中再检查一遍。如果代码仓库中存在该小程序的代码包,则可以将该小程序的代码包从代码仓库中拷贝到该账号的账号空间中以启动该小程序;否则,最后才通知下载器从服务器下载该小程序的代码包。并且,下载器可以将该小程序的代码包下载至终端的临时位置,进而可以将存放在临时位置处的该小程序的代码包拷贝到代码仓库中,以便下次其他账号使用。
参照图10,图10中的“淘汰机制”可以包含3个阶段,分别为“扫描阶段”、“标记阶段”和“清理阶段”。
其中,“扫描阶段”是指可以在某个特定时机,例如,在宿主应用的冷启动过程中,可以触发对小程序的代码包的扫描,即检测小程序的代码包是否过期。
“标记阶段”是指将“扫描阶段”的扫描结果缓存,扫描结果包含的是哪些小程序的代码包需要被淘汰。
“清理阶段”是指可以在某个特定时机,例如,在宿主应用处于休眠状态的情况下,即此时不会进行使用小程序的相关操作的情况下,可以触发对扫描结果的处理,例如,可以从缓存中读取扫描结果进行过期代码包文件的删除。并且,此处的“清理”是指针对账号空间以及代码仓库中所存放的已经过期的小程序的代码包进行清理。其中,宿主应用处于休眠状态可以包含两种情况,一种情况为宿主应用处于后台运行状态,另一种情况为宿主应用处于前台运行状态,并且终端处于息屏状态。
参照图11,图11是示出根据本公开的示例性实施例的一种小程序的启动流程中获取小程序的代码包的示意图。
在步骤1101中,可以检查当前登录账号的账号空间内是否存在小程序的代码包。
在步骤1102中,在当前登录账号的账号空间内存在小程序的代码包的情况下,可以执行当前登录账号的账号空间内的小程序的代码包以启动小程序。
在步骤1103中,在当前登录账号的账号空间内不存在小程序的代码包的情况下,可以检查代码仓库中是否存在小程序的代码包。
在步骤1104中,在代码仓库中存在小程序的代码包的情况下,可以执行代码仓库内的小程序的代码包以启动小程序。
进一步的,可以将代码仓库内的小程序的代码包拷贝至当前登录账号的账号空间内,并执行拷贝至当前登录账号的账号空间内的小程序的代码包以启动小程序;或者,可以在当前登录账号的账号空间内创建指向信息,其中,该指向信息用于从当前登录账号的账号空间指向代码仓库中存储的小程序的代码包。然后,可以通过访问指向信息,执行代码仓库内的小程序的代码包以启动小程序。
在步骤1105中,在代码仓库中不存在小程序的代码包的情况下,可以从服务器下载小程序的代码包至终端的临时位置。
在步骤1106中,将下载至临时位置处的小程序的代码包拷贝至当前登录账号的账号空间以启动小程序,并且将下载至临时位置处的小程序的代码包拷贝到代码仓库中以便其他账号下次使用。
参照图12,图12是示出根据本公开的示例性实施例的一种多个账号共享代码仓库中所存放的小程序的代码包的示意图。
在步骤1201中,在登录账号1的账号空间内不存在小程序的代码包的情况下,可以查询代码仓库中是否存在该小程序的代码包。
在步骤1202中,在代码仓库中不存在该小程序的代码包的情况下,可以利用下载器从服务器下载该小程序的代码包至终端的临时位置。
在步骤1203中,可以将被下载至终端的临时位置的该小程序的代码包拷贝至代码仓库。
在步骤1204中,可以在登录账号1的账号空间内创建指向信息,并可以通过访问所创建的指向信息,执行代码仓库内的小程序的代码包以启动小程序。
在步骤1205中,宿主应用的登录账号由登录账号1切换为登录账号2之后,登录账号2触发对代码仓库的查找后可以直接使用代码仓库内所存放的小程序的代码包以启动小程序。
根据本公开的示例性实施例,在执行下载至应用空间的目标第二应用的代码包出现错误的情况下,可以持续从服务器下载并执行目标第二应用的代码包,直至成功启动目标第二应用。即在执行从服务器下载的小程序的代码包出现错误的情况下,可以持续从服务器下载并执行小程序的代码包,直至成功启动小程序。接下来,可以删除应用空间内出现错误的目标第二应用的代码包,即可以删除出现错误的小程序的代码包。这样,通过删除出现错误的小程序的代码包,可以保证代码仓库内所存放的均为可执行的、正确的代码包,进而可以保证与宿主应用关联的所有账号可以准确、正常的执行代码仓库内的小程序的代码包。
本公开的“淘汰机制”是一种管控小程序的代码包对磁盘空间占用的机制,其主旨是淘汰长时间未使用过的小程序的代码包。随着时间的推移,小程序的代码包一般会迭代出一系列版本。宿主应用程序上不同账号即便对同一个小程序,也可能存在使用不同版本的代码包的情况,这会导致账号空间和代码仓库中某个小程序可能会存在多个版本的代码包。此外,一些特殊场景下,小程序还存在“降级”机制,即会从当前最新版本退回某个旧版本。这些都可能造成小程序的代码包在账号空间和代码仓库中出现堆积现象,如果不加控制,对宿主应用程序的磁盘空间会无限制占用。
因此,根据本公开的示例性实施例,在所有账号中的第一账号的第一账号空间内存储的第二应用的代码包过期的情况下,可以将第一账号空间内所存储的已经过期的第二应用的代码包删除;和/或,在应用空间内存储的第二应用的代码包过期的情况下,可以将应用空间内所存储的已经过期的第二应用的代码包删除,即在代码仓库内存储的小程序的代码包过期的情况下,可以将代码仓库内所存储的已经过期的小程序的代码包删除。这样,本公开的淘汰机制,可以将账号空间以及代码仓库内所存放的已经过期的小程序的代码包删除,可以减少过期的小程序的代码包对磁盘空间的占用,可以避免磁盘空间的过多浪费,节省了存储资源。
根据本公开的示例性实施例,在第二应用的代码包的未被使用的持续时长超过预设时长的情况下,可以确定第二应用的代码包过期。即在小程序的代码包的未被使用的持续时长超过预设时长的情况下,可以确定小程序的代码包过期。其中,“预设时长”可以根据实际需要进行设置,例如,可以设置为7天。
本公开提供的淘汰机制,可以针对长时间未使用过的小程序的代码包进行淘汰,避免出现小程序的代码包无限制堆积的现象。“淘汰机制”从原理上描述,本质上是将一定时间内未使用过的小程序的代码包文件删除。淘汰对象是账号空间和代码仓库内的小程序的代码包。本公开的淘汰方案中,通过标记代码包的生命周期,可以记录代码包的使用情况。当发现小程序的代码包在一定时间内没有被使用过,则可以认为此代码包应该被淘汰。
图13是示出根据本公开的示例性实施例的一种代码包的淘汰示意图。参照图13,登录账号1已经有一定时间没有使用过小程序A的1.0版本和2.0版本的代码包了,因此登录账号1的账号空间中可以只保留小程序A的3.0版本的代码包,其他版本的代码包都可以被淘汰;而登录账号2不久前才使用过小程序A的2.0版本、3.0版本的代码包,以及小程序B的3.0版本的代码包,并且登录账号2已经有一定时间没有使用过小程序B的1.0版本和2.0版本的代码包了,因此,登录账号2的账号空间可以淘汰小程序B的1.0版本和2.0版本的代码包,并且,可以保留小程序A的2.0版本、3.0版本的代码包,以及保留小程序B的3.0版本的代码包。
同理,在代码仓库中,小程序A的2.0版本和3.0版本的代码包最近都被使用过,小程序A的1.0版本的代码包已经一定时间没有被使用过,因此,代码仓库中可以只保留小程序A的2.0版本和3.0版本的代码包,小程序A的1.0版本的代码包可以被淘汰。
小程序B的1.0版本和2.0版本的代码包已经一定时间没有被使用过,小程序B的3.0版本的代码包最近被使用过,因此,代码仓库中可以只保留小程序B的3.0版本的代码包,小程序B的1.0版本和2.0版本的代码包可以被淘汰。
小程序C的1.0版本的代码包已经一定时间没有被使用过,因此,代码仓库中小程序C的1.0版本的代码包可以被淘汰。
小程序D的2.0版本的代码包最近被使用过,小程序D的1.0版本的代码包已经一定时间没有被使用过,因此,代码仓库中可以只保留小程序D的2.0版本的代码包,小程序D的1.0版本的代码包可以被淘汰。
根据本公开的示例性实施例,在第一应用的冷启动过程中,可以检测所有账号中每个账号的账号空间内所存储的第二应用的代码包是否过期。即在宿主应用的冷启动过程中,可以检测所有账号中每个账号的账号空间内所存储的小程序的代码包是否过期。
需要说明的是,代码包的淘汰实际上是将代码包文件从磁盘中删除,如果一个代码包在淘汰的过程中恰好被使用到则会出现潜在的问题。图14是示出根据本公开的示例性实施例的一种代码包淘汰异常情况的示意图。参照图14,一般来说从磁盘中删除代码包文件会发生在后台线程中,同代码包的使用线程是不一致的。选择开始淘汰代码包之后,后台线程便执行删除代码包文件的操作。此时,如果用户触发了对该需要淘汰的代码包的使用操作,就会出现两个线程中一个线程在删除,一个线程在使用的情况,最终可能出现需要使用代码包时该代码包却已经被删除完成的异常情况。
因此,根据本公开的示例性实施例,可以在第一应用处于休眠状态的情况下,才将第一账号空间内所存储的已经过期的第二应用的代码包删除。即可以在宿主应用处于休眠状态的情况下,才将第一账号空间内所存储的已经过期的小程序的代码包删除。如前所述,宿主应用处于休眠状态可以包含两种情况,一种情况为宿主应用处于后台运行状态,另一种情况为宿主应用处于前台运行状态,并且终端处于息屏状态。这样,在宿主应用处于休眠状态的情况下,由于无法进行使用小程序的相关操作,因此此时可以触发将已经过期的小程序的代码包删除的操作,既可以避免过期的代码包对磁盘空间的过多占用,还可以避免出现代码包的清理线程和使用线程发生冲突的情况。
本公开的小程序的代码包的淘汰机制中,代码包的淘汰大体上是根据它们的使用时间来进行,越久未被使用过的代码包越应该被淘汰,并且,代码包的过期时间越短,需要被淘汰的代码包的数量就越多。在实际的代码包淘汰的过程中,假设代码仓库中某个小程序的所有代码包都已过期,原则上它们都将被淘汰,但是,谁也无法预测该小程序何时会被再次使用,因此,可以选择保留该小程序的一个代码包不淘汰,以备将来使用。
需要说明的是,代码包淘汰并非为了淘汰而淘汰,当小程序的代码包对宿主应用程序的磁盘占用在可接受范围内时,就算存在过期的代码包,也可以选择不淘汰。以上是实际进行代码包淘汰时需要考虑的典型策略,在本公开中,这些策略可以通过服务器进行下发,并且还可以根据实际情况的变化对代码包的淘汰策略进行动态调整。
下面,以一个具体的例子来说明一下代码包的使用过程和淘汰过程。参照图15,图15是示出根据本公开的示例性实施例的一种代码包的使用过程和淘汰过程的示意图。
假设宿主应用一共存在3个登录账号,分别为登录账号x、登录账号y、登录账号z,并且假设代码包的过期时长为一周,即7天。假设登录账号x在9月1号想要打开宿主应用的小程序A,而登录账号x的账号空间以及宿主应用的代码仓库中均不存在该小程序A的代码包,则终端可以从服务器下载小程序A的代码包至终端的临时位置,假设本次下载的小程序A的代码包的版本号为1.0。
接下来,可以将下载至临时位置处的小程序A的版本号为1.0的代码包拷贝至登录账号x的账号空间,通过执行拷贝至登录账号x的账号空间内的小程序A的版本号为1.0的代码包来启动小程序A。并且,还可以将下载至临时位置处的小程序A的版本号为1.0的代码包拷贝至代码仓库,留待下次其他账号使用。进一步的,还可以将版本号1.0同步至所有账号的账号空间,即可以将版本号1.0同步至登录账号x的账号空间、登录账号y的账号空间、登录账号z的账号空间。
然后,在9月2号这一天,登录账号x又想要打开小程序A,此时,由于9月1号这一天登录账号x的账号空间内存放的版本号为1.0的代码包被使用过,而9月2号与9月1号之间仅相隔了一天,因此,9月2号这一天登录账号x的账号空间内存放的小程序A的版本号为1.0的代码包并没有过期,即此时可以直接执行登录账号x的账号空间内存放的版本号为1.0的代码包以启动小程序A。
接下来,登录账号y在9月4号这一天想要打开小程序A,而登录账号y的账号空间内不存在该小程序A的代码包。由于9月2号这一天登录账号x的账号空间内存放的版本号为1.0的代码包被使用过,即9月2号这一天代码仓库内存放的版本号为1.0的代码包被使用过,而9月4号与9月2号之间仅相隔了两天,因此,9月2号这一天代码仓库内存放的小程序A的版本号为1.0的代码包并没有过期,此时可以在登录账号y的账号空间内创建指向信息,并通过访问所创建的指向信息执行代码仓库内存放的小程序A的版本号为1.0的代码包以启动小程序A。
然后,登录账号y在9月5号这一天又想要打开小程序A,而登录账号y的账号空间内只存在版本号1.0以及指向代码仓库中小程序A的版本号为1.0的代码包的指向信息。由于9月4号这一天代码仓库内存放的版本号为1.0的代码包被使用过,而9月5号与9月4号之间仅相隔了一天,因此,9月4号这一天代码仓库内存放的小程序A的版本号为1.0的代码包并没有过期。并且,假设登录账号y在9月5号这一天打开小程序A时,服务器指示存在新版本的代码包,为了保障小程序A的打开速度,可以通过访问上述指向信息执行代码仓库内存放的小程序A的版本号为1.0的代码包以启动小程序A。进一步的,可以在宿主应用属于空闲状态时下载新版本的代码包至终端的临时位置,同时还可以将新版本的版本号2.0同步至所有账号的账号空间。并且,可以将下载至终端的临时位置处的小程序A的版本号为2.0的代码包拷贝至代码仓库。
接下来,登录账号z在9月6号这一天想要打开小程序A,而登录账号z的账号空间内只存在版本号1.0以及版本号2.0。由于9月5号这一天小程序A的版本号为2.0的代码包才被拷贝至代码仓库,而9月6号与9月5号之间仅相隔了一天,因此,9月5号这一天代码仓库内存放的小程序A的版本号为2.0的代码包并没有过期。此时,登录账号z可以通过账号空间内的版本号2.0,从代码仓库中查找到小程序A的版本号为2.0的代码包,并且可以将代码仓库中所存放的小程序A的版本号为2.0的代码包拷贝至登录账号z的账号空间,并执行拷贝至登录账号z的账号空间内的小程序A的版本号为2.0的代码包以启动小程序A。
然后,随着时间的推移,在9月9号这一天,针对版本号为1.0的代码包:由于9月9号与9月2号之间已经相隔了7天,达到了小程序的代码包的过期时长,因此,登录账号x的账号空间内所存放的版本号为1.0的代码包已经过期,需要被淘汰;代码仓库中所存放的小程序A的版本号为1.0的代码包的最近一次使用时间为9月5号,而9月9号与9月5号之间仅相隔了4天,未达到小程序的代码包的过期时长,因此,在9月9号这一天,代码仓库内所存放的版本号为1.0的代码包并未过期,不能被淘汰。
在9月9号这一天,针对版本号为2.0的代码包:由于9月9号与9月6号之间仅相隔了3天,未达到小程序的代码包的过期时长,因此,在9月9号这一天,登录账号z的账号空间内所存放的版本号为2.0的代码包以及代码仓库内所存放的版本号为2.0的代码包并未过期,不能被淘汰。
接下来,随着时间的推移,在9月12号这一天,针对版本号为1.0的代码包:代码仓库中所存放的小程序A的版本号为1.0的代码包的最近一次使用时间为9月5号,而9月12号与9月5号之间相隔了7天,达到了小程序的代码包的过期时长,因此,在9月12号这一天,代码仓库内所存放的版本号为1.0的代码包已经过期,需要被淘汰。
在9月12号这一天,针对版本号为2.0的代码包:由于9月12号与9月6号之间仅相隔了6天,未达到小程序的代码包的过期时长,因此,在9月12号这一天,登录账号z的账号空间内所存放的版本号为2.0的代码包以及代码仓库内所存放的版本号为2.0的代码包并未过期,不能被淘汰。
图16是示出根据本公开的示例性实施例的一种应用启动装置的框图。
参照图16,该装置1600可包括启动指令接收模块1601、账号空间查询模块1602和第一执行模块1603。
在通过目标账号执行第一应用的过程中,启动指令接收模块1601可以接收针对目标第二应用的启动指令。其中,第一应用是第二应用的宿主应用,即第二应用可以为宿主应用的小程序,目标第二应用可以为第二应用之一。与第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,第一应用具有用于管理与第一应用关联的所有账号所关联的第二应用的代码包的应用空间,该应用空间还可以称为“代码仓库”。目标账号可以为所有账号之一,且目标账号即为第一应用的当前登录账号。
例如,在通过当前登录账号执行宿主应用的过程中,即终端的屏幕上当前显示宿主应用的界面时,用户可以用手指在终端的屏幕上下滑一下,此时,可以显示宿主应用所关联的多个小程序中每个小程序的图标。如果用户点击了多个小程序中某个小程序的图标,终端就会接收到针对该被点击的小程序的启动指令。
根据本公开的示例性实施例,应用启动装置1600还可以包括版本号和链接获取模块、下载模块和禁止模块。
在接收针对目标第二应用的启动指令之后,版本号和链接获取模块还可以从服务器获取目标第二应用的代码包的目标版本号以及第二链接,其中,该第二链接用于指示目标第二应用的代码包在服务器上的存储网址,即该第二链接用于指示小程序的代码包在服务器上的存储网址。
在目标账号的目标账号空间内存储的目标第二应用的代码包的本地版本号小于目标版本号的情况下,在第一应用不存在网络请求时,即在宿主应用处于空闲状态时,下载模块可以通过访问第二链接从服务器下载版本号为目标版本号的目标第二应用的代码包,即可以通过访问第二链接从服务器下载版本号为目标版本号的小程序的代码包。
在目标账号空间内存储的目标第二应用的代码包的本地版本号等于目标版本号的情况下,即在当前登录账号的账号空间内存储的小程序的代码包的本地版本号等于目标版本号的情况下,说明服务器侧没有更新版本的代码包,因此,禁止模块可以禁止从服务器下载版本号为目标版本号的目标第二应用的代码包,即禁止模块可以禁止从服务器下载已经被下载过的小程序的代码包。
这样,在目标账号空间内存储的本地版本号小于目标版本号的情况下,说明服务器侧存在新版本的代码包,此时,如果立刻触发对新版本的代码包的下载,需要等待下载完成后再利用新版本的代码包执行小程序的启动流程,这会造成小程序启动缓慢。因此,在本公开中,可以等待第一应用不存在网络请求时,即只有在宿主应用处于空闲状态时,才会从服务器下载新版本的代码包,可以避免出现直接下载新版本的代码包导致小程序的打开速度过慢的情况,即可以避免出现小程序启动缓慢的情况,可以保证小程序更快的被打开,保证了小程序的打开效率。
账号空间查询模块1602响应于接收到的启动指令,可以查询目标账号的目标账号空间。例如,响应于启动指令,可以查询当前登录账号的账号空间。
根据本公开的示例性实施例,应用启动装置1600还可以包含第二执行模块。在目标账号空间存在目标第二应用的代码包的情况下,第二执行模块可以执行目标账号空间内的目标第二应用的代码包以启动目标第二应用,即在当前登录账号的账号空间存在小程序的代码包的情况下,可以执行当前登录账号的账号空间内的小程序的代码包以启动小程序。
第一执行模块1603在目标账号空间不存在目标第二应用的代码包的情况下,可以执行应用空间内的目标第二应用的代码包以启动目标第二应用。即在目标账号空间不存在目标第二应用的代码包的情况下,可以查询第一应用的应用空间,也即在当前登录账号的账号空间不存在小程序的代码包的情况下,可以查询宿主应用的代码仓库。其中,“代码仓库”可以为中心化的小程序的代码包的存储机制,该“代码仓库”用于存放所有小程序的可执行的代码包,与账号概念无关。即与宿主应用关联的所有账号可以共享“代码仓库”中的可执行的代码包。
根据本公开的示例性实施例,在应用空间存在目标第二应用的代码包的情况下,可以执行应用空间内的目标第二应用的代码包以启动目标第二应用,即在代码仓库存在小程序的代码包的情况下,可以执行代码仓库内的小程序的代码包以启动小程序。
在应用空间不存在目标第二应用的代码包的情况下,从可以服务器下载目标第二应用的代码包至应用空间,并可以执行下载至应用空间的目标第二应用的代码包以启动目标第二应用。即在代码仓库不存在小程序的代码包的情况下,可以从服务器下载并执行小程序的代码包以启动小程序。
根据本公开的示例性实施例,所有账号中每个账号的账号空间内存储有第二应用的被下载至终端的各个版本的代码包的版本号。在目标账号空间不存在目标第二应用的代码包的情况下,第一执行模块1603可以基于目标账号空间内存储的目标第二应用的代码包的第一版本号,查询应用空间内是否存在版本号为第一版本号的目标第二应用的代码包。
其中,第二应用的各个版本的代码包被从服务器下载至终端之后,第二应用的该版本的代码包的版本号会被同步至所有账号中每个账号的账号空间。例如,假设某个宿主应用一共存在3个登录账号,分别为登录账号1、登录账号2、登录账号3。该宿主应用的多个小程序中某个小程序的版本号为12.0的代码包被从服务器下载至终端之后,则该代码包的版本号12.0会被同步至登录账号1的账号空间、登录账号2的账号空间、登录账号3的账号空间。
在应用空间存在版本号为第一版本号的目标第二应用的代码包的情况下,第一执行模块1603可以执行应用空间内的版本号为第一版本号的目标第二应用的代码包以启动目标第二应用,即在代码仓库存在版本号为第一版本号的小程序的代码包的情况下,第一执行模块1603可以执行代码仓库内的版本号为第一版本号的小程序的代码包以启动小程序。这样,通过将被下载至终端的代码包的版本号同步至宿主应用的所有账号的账号空间,便于当前登录账号了解历史过程中到底有哪些版本的代码包被下载过,进而方便当前登录账号以账号空间内的至少一个版本号为索引,从代码仓库中查询相应版本号的代码包。
根据本公开的示例性实施例,第一执行模块1603可以将应用空间中存储的目标第二应用的代码包拷贝至目标账号空间内,并执行拷贝至目标账号空间内的目标第二应用的代码包以启动目标第二应用,即可以将代码仓库中存储的小程序的代码包拷贝至当前登录账号的账号空间内,并执行拷贝至当前登录账号的账号空间内的小程序的代码包以启动小程序。
需要说明的是,如果每次都将代码仓库中存储的小程序的代码包拷贝至当前登录账号的账号空间内,并执行拷贝至当前登录账号的账号空间内的小程序的代码包以启动小程序的话,会造成对终端的磁盘空间的过多占用。例如,假设一个代码包的大小为两兆(2M),如果宿主应用的n个账号中每个账号均将代码仓库中存储的小程序的代码包拷贝至该账号的账号空间内以启动小程序,则终端上需要存储(n+1)个代码包,其中,“(n+1)”中的1表示代码仓库中存储的代码包,此时,终端上存储的(n+1)个代码包的大小为:(n+1)×2M。并且,宿主应用所关联的账号越多,即n的取值越大,就会从代码仓库中拷贝出越多的代码包,这会造成对终端的磁盘空间的无限制占用,造成磁盘空间的过多浪费。
因此,本公开提可以提供一种“替身”机制,即可以在账号空间内创建代码仓库中所存放的代码包的“替身”,这个“替身”指向代码仓库中的某个实际的代码包文件,当需要使用代码包时,可以根据“替身”来代码仓库中查找到实际的代码包文件。并且,这个代码包的“替身”的大小远远小于代码包本身的大小,即代码包的“替身”所占用的文件空间很小。这样,针对同一份代码包,假设该代码包的大小为两兆(2M),如果使用了“替身”机制,则终端上存储的仅仅为一个大小为2M的实际的代码包文件以及n个很小的“替身”,就是说n个账号空间加上代码仓库所存储的该代码包的总体积不会变成(n+1)×2M,而仅仅是两兆大小加上n个非常小的代码包的“替身”的体积。
根据本公开的示例性实施例,第一执行模块1603可以在目标账号空间内创建指向信息,其中,该指向信息用于从目标账号空间指向应用空间中存储的目标第二应用的代码包。即可以在当前登录账号的账号空间内创建指向信息,该指向信息用于从当前登录账号的账号空间指向代码仓库中存储的小程序的代码包,该“指向信息”即为前述代码包的“替身”。
然后,第一执行模块1603可以通过访问指向信息,执行应用空间内的目标第二应用的代码包以启动目标第二应用,即可以通过访问代码包的“替身”,执行代码仓库内的小程序的代码包以启动小程序。
这样,相比于每次都将代码仓库中存储的小程序的代码包拷贝至账号空间内以启动小程序的方式,通过在账号空间内设置代码包的“替身”,可以大大减少同一份代码包的多次拷贝对终端的磁盘空间的过多占用,可以大大节省存储资源。
根据本公开的示例性实施例,指向信息可以为从目标账号空间指向应用空间中存储的目标第二应用的代码包的第一链接。其中,“第一链接”可以为“软链接”的形式,“软链接”是一种操作系统的概念,又叫符号链接,这个“软链接”文件包含了另一个文件的路径名,可以链接不同文件系统的文件。软链接文件只是其源文件的一个标记,当删除了源文件后,软链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。在对符号链接文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,例如,在对符号链接文件进行读或写操作的时候,系统会自动把该操作转换为对代码仓库中实际的代码包文件的操作。但删除软链接文件时,系统仅仅删除软链接文件,而不删除源文件本身。
或者,指向信息还可以为包含目标第二应用的代码包在应用空间中的存储路径的文本文件,即指向信息还可以为包含小程序的代码包在代码仓库中的存储路径的文本文件,读取这个文本文件中的存储路径之后,就可以访问这个存储路径下的实际代码包文件。
根据本公开的示例性实施例,在执行下载至应用空间的目标第二应用的代码包出现错误的情况下,第一执行模块1603可以持续从服务器下载并执行目标第二应用的代码包,直至成功启动目标第二应用。即在执行从服务器下载的小程序的代码包出现错误的情况下,第一执行模块1603可以持续从服务器下载并执行小程序的代码包,直至成功启动小程序。接下来,第一执行模块1603可以删除应用空间内出现错误的目标第二应用的代码包,即可以删除出现错误的小程序的代码包。这样,通过删除出现错误的小程序的代码包,可以保证代码仓库内所存放的均为可执行的、正确的代码包,进而可以保证与宿主应用关联的所有账号可以准确、正常的执行代码仓库内的小程序的代码包。
本公开的“淘汰机制”是一种管控小程序的代码包对磁盘空间占用的机制,其主旨是淘汰长时间未使用过的小程序的代码包。随着时间的推移,小程序的代码包一般会迭代出一系列版本。宿主应用程序上不同账号即便对同一个小程序,也可能存在使用不同版本的代码包的情况,这会导致账号空间和代码仓库中某个小程序可能会存在多个版本的代码包。此外,一些特殊场景下,小程序还存在“降级”机制,即会从当前最新版本退回某个旧版本。这些都可能造成小程序的代码包在账号空间和代码仓库中出现堆积现象,如果不加控制,对宿主应用程序的磁盘空间会无限制占用。
因此,根据本公开的示例性实施例,应用启动装置1600还可以包括第一删除模块,和/或,第二删除模块。
在所有账号中的第一账号的第一账号空间内存储的第二应用的代码包过期的情况下,第一删除模块可以将第一账号空间内所存储的已经过期的第二应用的代码包删除;和/或,在应用空间内存储的第二应用的代码包过期的情况下,第二删除模块可以将应用空间内所存储的已经过期的第二应用的代码包删除,即在代码仓库内存储的小程序的代码包过期的情况下,可以将代码仓库内所存储的已经过期的小程序的代码包删除。这样,本公开的淘汰机制,可以将账号空间以及代码仓库内所存放的已经过期的小程序的代码包删除,可以减少过期的小程序的代码包对磁盘空间的占用,可以避免磁盘空间的过多浪费,节省了存储资源。
根据本公开的示例性实施例,应用启动装置1600还可以包括过期确定模块。在第二应用的代码包的未被使用的持续时长超过预设时长的情况下,过期确定模块可以确定第二应用的代码包过期。即在小程序的代码包的未被使用的持续时长超过预设时长的情况下,可以确定小程序的代码包过期。其中,“预设时长”可以根据实际需要进行设置,例如,可以设置为7天。
本公开提供的淘汰机制,可以针对长时间未使用过的小程序的代码包进行淘汰,避免出现小程序的代码包无限制堆积的现象。“淘汰机制”从原理上描述,本质上是将一定时间内未使用过的小程序的代码包文件删除。淘汰对象是账号空间和代码仓库内的小程序的代码包。本公开的淘汰方案中,通过标记代码包的生命周期,可以记录代码包的使用情况。当发现小程序的代码包在一定时间内没有被使用过,则可以认为此代码包应该被淘汰。
根据本公开的示例性实施例,应用启动装置1600还可以包括检测模块。在第一应用的冷启动过程中,检测模块可以检测所有账号中每个账号的账号空间内所存储的第二应用的代码包是否过期。即在宿主应用的冷启动过程中,检测模块可以检测所有账号中每个账号的账号空间内所存储的小程序的代码包是否过期。
需要说明的是,代码包的淘汰实际上是将代码包文件从磁盘中删除,如果一个代码包在淘汰的过程中恰好被使用到则会出现潜在的问题。一般来说,从磁盘中删除代码包文件会发生在后台线程中,同代码包的使用线程是不一致的。选择开始淘汰代码包之后,后台线程便执行删除代码包文件的操作。此时,如果用户触发了对该需要淘汰的代码包的使用操作,就会出现两个线程中一个线程在删除,一个线程在使用的情况,最终可能出现需要使用代码包时该代码包却已经被删除完成的异常情况。
因此,根据本公开的示例性实施例,可以在第一应用处于休眠状态的情况下,第一删除模块才将第一账号空间内所存储的已经过期的第二应用的代码包删除。即可以在宿主应用处于休眠状态的情况下,第一删除模块才将第一账号空间内所存储的已经过期的小程序的代码包删除。如前所述,宿主应用处于休眠状态可以包含两种情况,一种情况为宿主应用处于后台运行状态,另一种情况为宿主应用处于前台运行状态,并且终端处于息屏状态。这样,在宿主应用处于休眠状态的情况下,由于无法进行使用小程序的相关操作,因此此时可以触发将已经过期的小程序的代码包删除的操作,既可以避免过期的代码包对磁盘空间的过多占用,还可以避免出现代码包的清理线程和使用线程发生冲突的情况。
本公开的小程序的代码包的淘汰机制中,代码包的淘汰大体上是根据它们的使用时间来进行,越久未被使用过的代码包越应该被淘汰,并且,代码包的过期时间越短,需要被淘汰的代码包的数量就越多。在实际的代码包淘汰的过程中,假设代码仓库中某个小程序的所有代码包都已过期,原则上它们都将被淘汰,但是,谁也无法预测该小程序何时会被再次使用,因此,可以选择保留该小程序的一个代码包不淘汰,以备将来使用。
需要说明的是,代码包淘汰并非为了淘汰而淘汰,当小程序的代码包对宿主应用程序的磁盘占用在可接受范围内时,就算存在过期的代码包,也可以选择不淘汰。以上是实际进行代码包淘汰时需要考虑的典型策略,在本公开中,这些策略可以通过服务器进行下发,并且还可以根据实际情况的变化对代码包的淘汰策略进行动态调整。
图17是示出根据本公开的示例性实施例的一种电子设备1700的框图。
参照图17,电子设备1700包括至少一个存储器1701和至少一个处理器1702,所述至少一个存储器1701中存储有指令,当指令被至少一个处理器1702执行时,执行根据本公开的示例性实施例的应用启动方法。
作为示例,电子设备1700可以是PC计算机、平板装置、个人数字助理、智能手机、或其他能够执行上述指令的装置。这里,电子设备1700并非必须是单个的电子设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。电子设备1700还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子设备。
在电子设备1700中,处理器1702可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
处理器1702可运行存储在存储器1701中的指令或代码,其中,存储器1701还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,网络接口装置可采用任何已知的传输协议。
存储器1701可与处理器1702集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器1701可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器1701和处理器1702可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器1702能够读取存储在存储器中的文件。
此外,电子设备1700还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备1700的所有组件可经由总线和/或网络而彼此连接。
根据本公开的示例性实施例,还可提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述应用启动方法。这里的计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。
根据本公开的示例性实施例,还可提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据本公开的应用启动方法。
根据本公开的应用启动方法、装置、电子设备和存储介质,与第一应用关联的所有账号中每个账号均对应有各自的账号空间,当出现账号登录、账号注销或者账号切换时,第二应用可以运行在不同的账号空间中,可以确保不同账号之间的数据相互隔离,互不影响。即通过隔离管理的方式,可以保证不同账号空间内的第二应用的代码包相互独立,可以避免出现某个账号的错误操作导致其他账号无法正常打开第二应用的情况,打开小程序的容错性较好。
并且,每个第一应用还可以对应有一个应用空间,该应用空间用于存放所有第二应用的可执行的代码包,与账号概念无关。即与第一应用关联的所有账号可以共享应用空间中的可执行的代码包,避免出现不同账号重复下载同一份第二应用的代码包的情况,可以避免代码包的重复下载所带来的带宽和流量的浪费,还可以避免重复下载的代码包对终端的磁盘空间的浪费,可以节省带宽资源和存储资源。
进一步的,在目标账号空间内存储的本地版本号小于目标版本号的情况下,说明服务器侧存在新版本的代码包,此时,如果立刻触发对新版本的代码包的下载,需要等待下载完成后再利用新版本的代码包执行小程序的启动流程,这会造成小程序启动缓慢。因此,在本公开中,可以等待第一应用不存在网络请求时,即只有在宿主应用处于空闲状态时,才会从服务器下载新版本的代码包,可以避免出现直接下载新版本的代码包导致小程序的打开速度过慢的情况,即可以避免出现小程序启动缓慢的情况,可以保证小程序更快的被打开,保证了小程序的打开效率。
进一步的,通过将被下载至终端的代码包的版本号同步至宿主应用的所有账号的账号空间,便于当前登录账号了解历史过程中到底有哪些版本的代码包被下载过,进而方便当前登录账号以账号空间内的至少一个版本号为索引,从代码仓库中查询相应版本号的代码包。
进一步的,相比于每次都将代码仓库中存储的小程序的代码包拷贝至账号空间内以启动小程序的方式,通过在账号空间内设置代码包的“替身”,可以大大减少同一份代码包的多次拷贝对终端的磁盘空间的过多占用,可以大大节省存储资源。
进一步的,通过删除出现错误的小程序的代码包,可以保证代码仓库内所存放的均为可执行的、正确的代码包,进而可以保证与宿主应用关联的所有账号可以准确、正常的执行代码仓库内的小程序的代码包。
进一步的,本公开的淘汰机制,可以将账号空间以及代码仓库内所存放的已经过期的小程序的代码包删除,可以减少过期的小程序的代码包对磁盘空间的占用,可以避免磁盘空间的过多浪费,节省了存储资源。
进一步的,在宿主应用处于休眠状态的情况下,由于无法进行使用小程序的相关操作,因此此时可以触发将已经过期的小程序的代码包删除的操作,既可以避免过期的代码包对磁盘空间的过多占用,还可以避免出现代码包的清理线程和使用线程发生冲突的情况。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (15)
1.一种应用启动方法,应用于终端,其特征在于,包括:
在通过目标账号执行第一应用的过程中,接收针对目标第二应用的启动指令,其中,所述第一应用是第二应用的宿主应用,所述目标第二应用为所述第二应用之一,与所述第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,所述第一应用具有用于管理与所述第一应用关联的所有账号所关联的第二应用的代码包的应用空间,所述目标账号为所述所有账号之一;
响应于所述启动指令,查询所述目标账号的目标账号空间;
在所述目标账号空间不存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
2.如权利要求1所述的应用启动方法,其特征在于,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:
在所述应用空间存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用;
在所述应用空间不存在所述目标第二应用的代码包的情况下,从服务器下载所述目标第二应用的代码包至所述应用空间;
执行下载至所述应用空间的所述目标第二应用的代码包以启动所述目标第二应用。
3.如权利要求2所述的应用启动方法,其特征在于,所述执行下载至所述应用空间的所述目标第二应用的代码包以启动所述目标第二应用,包括:
在执行下载至所述应用空间的所述目标第二应用的代码包出现错误的情况下,持续从所述服务器下载并执行所述目标第二应用的代码包,直至成功启动所述目标第二应用;
删除所述应用空间内出现错误的所述目标第二应用的代码包。
4.如权利要求1所述的应用启动方法,其特征在于,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:
将所述应用空间中存储的所述目标第二应用的代码包拷贝至所述目标账号空间内,并执行拷贝至所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
5.如权利要求1所述的应用启动方法,其特征在于,所述执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用,包括:
在所述目标账号空间内创建指向信息,其中,所述指向信息用于从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包;
通过访问所述指向信息,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
6.如权利要求5所述的应用启动方法,其特征在于,所述指向信息为从所述目标账号空间指向所述应用空间中存储的所述目标第二应用的代码包的第一链接,或者,为包含所述目标第二应用的代码包在所述应用空间中的存储路径的文本文件。
7.如权利要求1所述的应用启动方法,其特征在于,在所述接收针对目标第二应用的启动指令之后,还包括:
从服务器获取所述目标第二应用的代码包的目标版本号以及第二链接;
在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号小于所述目标版本号的情况下,在所述第一应用不存在网络请求时,通过访问所述第二链接从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包;
在所述目标账号空间内存储的所述目标第二应用的代码包的本地版本号等于所述目标版本号的情况下,禁止从所述服务器下载版本号为所述目标版本号的所述目标第二应用的代码包。
8.如权利要求1所述的应用启动方法,其特征在于,还包括:
在所述所有账号中的第一账号的第一账号空间内存储的所述第二应用的代码包过期的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除;
和/或,在所述应用空间内存储的所述第二应用的代码包过期的情况下,将所述应用空间内所存储的已经过期的所述第二应用的代码包删除。
9.如权利要求8所述的应用启动方法,其特征在于,还包括:
在所述第二应用的代码包的未被使用的持续时长超过预设时长的情况下,确定所述第二应用的代码包过期。
10.如权利要求8所述的应用启动方法,其特征在于,还包括:
在所述第一应用的冷启动过程中,检测所述所有账号中每个账号的账号空间内所存储的所述第二应用的代码包是否过期。
11.如权利要求8所述的应用启动方法,其特征在于,所述将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除,包括:
在所述第一应用处于休眠状态的情况下,将所述第一账号空间内所存储的已经过期的所述第二应用的代码包删除。
12.如权利要求1所述的应用启动方法,其特征在于,还包括:
在所述目标账号空间存在所述目标第二应用的代码包的情况下,执行所述目标账号空间内的所述目标第二应用的代码包以启动所述目标第二应用。
13.一种应用启动装置,应用于终端,其特征在于,包括:
启动指令接收模块,被配置为在通过目标账号执行第一应用的过程中,接收针对目标第二应用的启动指令,其中,所述第一应用是第二应用的宿主应用,所述目标第二应用为所述第二应用之一,与所述第一应用关联的每个账号分别具有用于管理各自账号所关联的第二应用的代码包的账号空间,所述第一应用具有用于管理与所述第一应用关联的所有账号所关联的第二应用的代码包的应用空间,所述目标账号为所述所有账号之一;
账号空间查询模块,被配置为响应于所述启动指令,查询所述目标账号的目标账号空间;
第一执行模块,被配置为在所述目标账号空间不存在所述目标第二应用的代码包的情况下,执行所述应用空间内的所述目标第二应用的代码包以启动所述目标第二应用。
14.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至12中任一项所述的应用启动方法。
15.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至12中任一项所述的应用启动方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310003886.4A CN115934206A (zh) | 2023-01-03 | 2023-01-03 | 应用启动方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310003886.4A CN115934206A (zh) | 2023-01-03 | 2023-01-03 | 应用启动方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934206A true CN115934206A (zh) | 2023-04-07 |
Family
ID=86649167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310003886.4A Pending CN115934206A (zh) | 2023-01-03 | 2023-01-03 | 应用启动方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115934206A (zh) |
-
2023
- 2023-01-03 CN CN202310003886.4A patent/CN115934206A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101644666B1 (ko) | 장치와 웹 서비스 간에 브라우저 캐시를 동기화하는 프로그래밍 모델 | |
CN102667772B (zh) | 文件级分级存储管理系统、方法和设备 | |
US8250033B1 (en) | Replication of a data set using differential snapshots | |
US9805054B2 (en) | Managing a global namespace for a distributed filesystem | |
RU2608668C2 (ru) | Система и способ управления и организации кэша веб-браузера для обеспечения автономного просмотра | |
JP6309969B2 (ja) | オンラインストレージシステムでのデータ同期化に関するアプリケーションプログラミングインタフェース | |
US8078577B2 (en) | Method of bi-directional synchronization of user data | |
RU2629448C2 (ru) | Система и способ управления и организации кэша веб-браузера | |
US20060037079A1 (en) | System, method and program for scanning for viruses | |
US20070239725A1 (en) | Active cache offline access and management of project files | |
US20090132621A1 (en) | Selecting storage location for file storage based on storage longevity and speed | |
US20070022117A1 (en) | Accessing file system snapshots directly within a file system directory | |
US10353636B2 (en) | Write filter with dynamically expandable overlay | |
CN104915268A (zh) | 桌面布局的存储、恢复方法及其装置、终端设备、系统 | |
US8745342B2 (en) | Computer system for controlling backups using wide area network | |
US10108434B2 (en) | Booting a computing device by streaming a desktop image over a network | |
WO2021040844A1 (en) | Hydration in virtual machines | |
CN108415736A (zh) | 利用进程文件系统标记程序进程的方法、装置和设备 | |
US11507473B2 (en) | System and method for efficient backup generation | |
US9910662B2 (en) | Selectively migrating applications during an operating system upgrade | |
KR102123701B1 (ko) | 네트워크 부트 시스템 | |
CN115934206A (zh) | 应用启动方法、装置、电子设备和存储介质 | |
US11977559B2 (en) | Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs | |
US20170364353A1 (en) | Segregating a monolithic computing system into multiple attachable application containers based on application boundaries | |
JP2010237742A (ja) | 仮想マシンサーバ、仮想マシン制御方法及び仮想マシン制御プログラム |
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 |