使用应用容器管理代码和依赖性数据的传递
文献发布时间:2023-06-19 11:49:09
分案说明
本申请属于申请日为2017年1月13日的中国发明专利申请201780003807.2的分案申请。
技术领域
本公开涉及使用应用容器管理代码和依赖性数据的传递。
背景技术
计算设备可以执行各种功能,例如执行应用、接收用户输入以及输出用于显示的信息。例如,计算设备可以执行电子邮件客户端、旅行助理、消息收发客户端等应用。应用可以包括实现各种功能的一个或多个可执行组件。在一些分布式环境中,用户计算设备(例如智能手机)可以使用媒体商店应用来搜索和安装由远程计算系统提供的应用。通常,当用户选择媒体商店应用中的应用以安装在用户计算设备处时,远程计算系统发送包括用于执行应用的所有功能的所有可执行组件的单个文件,而不管用户是否实际使用所有功能。此外,在所有可执行组件已经下载并安装在用户计算设备处之前,应用通常是不可执行的。
发明内容
总体而言,本公开的技术用于管理应用容器对应用代码和依赖性数据的传递,而不需要对底层操作系统进行修改。对于操作系统来说,应用容器看起来是应用本身,即使在应用容器内没有执行任何应用代码,应用容器也不是独立的功能应用。应用容器可以提供开发人员在编写应用时可用的多个不同的应用编程接口(API)。也就是说,开发人员可以避免依赖底层操作系统或共享库提供的API,并且可以避免在编译时静态链接各种库。相反,开发人员可以假设由应用容器提供的API是不变的,并且应用容器本身管理应用依赖项、共享库更新等。如果用户发起应用的安装,则应用容器将并行地检索应用的一个或多个不同子封装以及开发人员指定的任何依赖性数据。依赖性数据可以包括强制依赖性数据以及可选的依赖性数据。
一旦检索到至少一个子封装和强制依赖性数据,应用容器就可以开始执行应用,即使不是所有子封装或可选依赖性数据都可能被检索。也就是说,本公开的技术不是等待所有应用子封装和依赖性数据被下载到计算设备,而是使计算设备能够使用应用容器来管理应用子封装和依赖性数据的检索,并且一旦检索到必需子封装和依赖性数据,即使不是所有子封装和依赖性数据都已经下载到计算设备,也开始执行应用。以这种方式,计算设备可以比需要在执行之前下载所有数据的情况更快地开始执行应用。此外,这些技术可以更有效地使用计算设备处可用的数据存储空间,因为通过仅下载执行应用的某些功能所必需的子封装和数据,应用可以消耗计算设备上更少的存储空间。
在一个示例中,一种方法包括:由在计算设备处执行的监管器组件接收执行应用的请求;由监管器组件确定是否在计算设备的存储器中分配了用于维护应用的可安装子封装的应用容器;以及响应于确定在计算设备的存储器中分配了应用容器,由应用容器的容器运行时确定应用的多个依赖项,其中,一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项。该方法进一步可以包括:由容器运行时发起对所述一个或多个必需依赖项的检索;由容器运行时发起对所述一个或多个可选依赖项的检索;以及响应于接收到一个或多个必需依赖项中的所有必需依赖项,并且当所述可选依赖项中的至少一个可选依赖项尚未被容器运行时接收到时,由计算设备执行应用。
在另一示例中,计算设备包括存储监管器组件的一个或多个存储组件和一个或多个处理器。一个或多个处理器执行监管器组件以接收执行应用的请求并接收执行应用的请求。响应于所述监管器组件确定在所述计算设备的存储器中分配了所述应用容器,所述应用容器的容器运行时能够由所述一个或多个处理器执行以:确定所述应用的一个或多个依赖项,其中,所述一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项,发起对所述一个或多个必需依赖项的检索,发起对所述一个或多个可选依赖项的检索,以及响应于接收到所述一个或多个必需依赖项中的所有必需依赖项,并且在可选依赖项中的至少一个可选依赖项尚未被所述容器运行时接收到时,执行所述应用。
在另一示例中,一种编码有指令的非暂时性计算机可读存储介质,所述指令当由计算设备的一个或多个处理器执行时,使得所述一个或多个处理器:接收执行应用的请求,确定是否在所述计算设备的存储器中分配了用于维护所述应用的可安装子封装的应用容器,以及响应于确定在所述计算设备的存储器中分配了所述应用容器,确定所述应用的一个或多个依赖项,其中,所述一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项。所述指令还使得所述一个或多个处理器:发起对所述一个或多个必需依赖项的检索,发起对所述一个或多个可选依赖项的检索,以及响应于接收到所述一个或多个必需依赖项中的所有必需依赖项,并且当所述可选依赖项中的至少一个可选依赖项尚未被所述容器运行时接收到时,执行所述应用。
在另一示例中,一种设备包括:用于接收执行应用的请求的装置;用于确定是否在计算设备的存储器中分配了用于维护应用的可安装子封装的应用容器的装置;以及用于响应于确定在计算设备的存储器中分配了应用容器,确定应用的一个或多个依赖项的装置,其中,一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项。所述设备还包括用于发起对所述一个或多个必需依赖项和所述一个或多个可选依赖项的检索的装置,以及用于响应于接收到所述一个或多个必需依赖项中的所有必需依赖项并且在所述可选依赖项中的至少一个可选依赖项尚未被所述容器运行时接收到时执行所述应用的装置。
一个或多个示例的细节在附图和下面的描述中阐述。本公开的其它特征、目的和优点将从说明书和附图以及从权利要求中变得显而易见。
附图说明
图1是示出根据本公开的技术的具有动态加载应用依赖项的应用容器的示例计算设备的概念图。
图2是示出根据本公开的一个或多个方面的计算设备的进一步细节的框图。
图3是示出根据本公开的技术的具有用于动态加载应用依赖项的应用容器的计算设备的示例操作的流程图。
具体实施方式
图1是示出根据本公开的技术的具有动态加载应用依赖项的应用容器102A-102C(“应用容器102”)的示例计算设备100的概念图。计算设备100的示例可以包括但不限于便携式或移动设备,例如移动电话(包括智能手机)、笔记本计算机、平板计算机、例如智能手表或计算机化眼镜等可穿戴计算设备、智能电视平台、例如车辆音响主机等车辆计算系统、相机、个人数字助理(PDA)等。在一些示例中,计算设备100可以包括诸如台式计算机、服务器、大型机等的固定计算设备。
如图1所示,计算设备100包括应用容器102、系统运行时126、操作系统136和硬件组件138。计算设备100可以经由网络140和通信链路148A-148B与一个或多个其它远程计算设备142A-142C(“远程计算设备142”)通信。如图1所示,网络140表示任何公共或专用通信网络,例如蜂窝、Wi-Fi和/或用于在计算设备之间传输数据的其它类型的网络。计算设备100和远程计算设备142可以使用任何合适的通信技术跨网络140发送和接收数据。例如,计算设备100可以使用通信链路148A可操作地耦合到网络140。远程计算设备142A可以通过通信链路148B可操作地耦合到网络140。网络140可以包括网络集线器、网络交换机、网络路由器等,它们可操作地相互耦合,从而提供计算设备100和远程计算设备142之间的信息交换。在一些示例中,通信链路138A-138B可以是以太网、ATM或其它网络连接。这种连接可以是无线和/或有线连接。
硬件组件138可以包括但不限于计算机处理器、通信单元(例如调制解调器、网络接口控制器等)、输入组件、输出组件、存在敏感显示器、易失性和非易失性存储器、以及电源,仅举几个例子。操作系统136可以在硬件组件138上执行并管理计算设备100的硬件和软件组件。例如,操作系统136可以执行存储器管理、进程调度和非易失性存储管理。操作系统136还可以向在计算设备100处执行的应用提供网络和安全服务。操作系统136还可以执行比上述更多或更少的功能。
运行时系统126实现用于根据编写和构建或编译应用所用的特定编程语言构建的应用的执行模型。运行时系统126可以包括在执行期间应用容器102可访问的一个或多个库和/或服务。如在本公开中进一步描述的,每个应用容器102可以对应于不同的应用。运行时系统126可以包括线程管理服务、屏幕绘制和用户界面呈现组件、以及应用间和应用内消息收发服务,仅列举几个示例服务。应用容器102可以通过由运行时组件128公开的应用编程接口(API)访问服务。在一些示例中,运行时系统126可以作为一个或多个进程和/或线程来执行。一个或多个进程和/或线程可以在具有或不具有操作系统特权的情况下执行。
如图1所示,运行时系统126可以包括运行时组件128。每个不同的运行时组件可以用一个或多个进程和/或线程来实现。在一些示例中,每个不同的运行时组件可以提供用户定义的功能集。例如,用户界面呈现组件可以用定义用户界面元素(例如按钮、列表、图像、输入字段等)及其相应行为的一个或多个库来实现。用户界面呈现组件可以提供API,应用容器102调用API以在图形用户界面中呈现用户界面元素。
监管器组件128A包括在运行时组件128中。监管器组件128A执行应用容器102的安装和维护,并提供应用间和应用内消息收发服务。通常,监管器组件128A不同于在计算设备处执行的操作系统136。监管器组件128A包括消息代理130,其监听由应用容器102生成的消息并执行用于发送应用容器或一个或多个其它应用容器的动作。监管器组件128A可以在调度任何消息(例如,包含URI作为用户指定标识符的消息)时具有第一优先级或第一机会。在一些示例中,消息代理130可以提供对消息的附加处理,例如从应用容器池132分配应用容器、加强消息的安全性以及记录消息,仅举几个示例。作为示例,应用容器102A可以生成消息以在相同应用内从第一用户界面导航到第二用户界面。应用容器102A可以向消息代理130发送消息,消息代理130包括消息收发表134,消息收发表134包括过滤器的集合,其中每个过滤器具有一个或多个条件和一个或多个相应的动作。如果消息的内容与过滤器的条件匹配,则消息代理130可以执行相应的动作,诸如执行指令以输出第二图形用户界面。在一些示例中,上述消息可以由路由器112在不将消息转发到消息代理130的情况下在内部路由。
在一些示例中,监管器组件128A确保至少一个应用容器被包括在应用容器池132中并且准备好被唤醒。包括在应用容器池132中的每个应用容器当前不被分配给特定应用并且当前不在执行应用代码。然而,包括在应用容器池132中的每个应用容器包括足够的引导代码(bootstrapping code),以能够在监管器组件128A唤醒特定应用容器并将特定应用容器分配给特定应用时加载和运行应用代码。来自应用容器池132的特定应用容器接收到来自监管器组件128A的指令,以开始加载和运行特定应用的应用代码。
如上所述,每个应用容器102可以在不同应用正在执行时对应于相应的应用。在各种情况下,监管器组件128A维护哪些应用容器被映射到哪些执行应用的映射。应用可以包括不同的功能以在计算设备100上执行操作。例如,应用可以包括电子邮件应用、文本消息收发应用、即时消息收发应用、天气应用、视频会议应用、社交网络应用、天气应用、股票市场应用、紧急警报应用、体育应用、办公生产力应用、多媒体播放器,仅举几个示例。
当用户或操作系统调用特定应用时,监管器组件128A从应用容器池132动态地分配应用容器102,并维护特定应用容器102到相应应用的映射。当应用被终止时,监管器组件128A可以清理不再需要的任何应用容器102。例如,监管器组件128A可以重置应用容器102的状态,或者可以卸载映射到现在终止的应用的应用容器102。在监管器组件128A卸载不再映射到活动执行的应用的应用容器102的示例中,监管器组件128A可以安装新的应用容器并将其添加到应用容器池132,以确保响应于应用的调用准备唤醒至少一个应用容器。以这种方式,应用安装的用户交互等待时间可以减少到零或接近零,同时从操作系统的角度来看,为每个应用维护单独的标识。
如图1所示,应用容器102A提供执行环境和支持服务以指导应用的可执行组件108的执行。应用容器102可以作为操作系统136中的独立进程来执行,并且可以包括用于多个不同应用的公共功能集合。在一些示例中,应用容器102A包括消息收发接口115。路由器112可以经由消息收发接口115从运行时系统126接收消息,并且运行时系统126可以经由消息收发接口115从可执行组件108和路由器112接收消息。应用容器102A的程序逻辑可以在可执行组件108中实现。可执行组件可以是机器可执行代码逻辑分组。例如,在面向对象设计中,单个可执行组件可以是包括机器可执行代码的单个编译类文件。
应用容器102A可以是用于一个或多个子封装104的容器。在一些示例中,子封装包括两个或多个可执行组件108。子封装可包括资源(例如,图像、文本、视频或任何其它未编译数据)、安全性和/或签名信息、版本信息和/或依赖项信息、或应用的任何其它信息。软件开发人员可以将应用设计为包括多个用户定义的子封装。每个用户定义的子封装可以包括共同提供离散功能集的可执行组件集合。例如,软件开发人员可以设计具有多个不同用户界面的导航应用。每个用户界面可以包括不同的用户界面元素和相应的行为的集合。这样,每个用户界面可以用不同的可执行组件集合来实现。例如,导航应用可以包括语音提示转向(turn-by-turn)导航用户界面、兴趣点用户界面(例如,在地图上显示兴趣点的细节)和设置用户界面。软件开发人员可以设计具有三个不同子封装的应用,其中每个子封装包括可执行组件集合以实现相应用户界面的功能。
应用容器102A可以包括容器运行时124。容器运行时124可以包括到由容器运行时124、运行时系统126和/或操作系统136内的库提供的服务和/或功能的一个或多个库和/或一个或多个应用编程接口(API)117。这样,容器运行时124可以提供安全的进程内API层。即,每个应用容器102与应用容器所映射到的特定应用的应用代码共享进程和地址空间。通过共享进程和地址空间,应用容器102可以简化应用代码和共享API代码之间的方法调用语义。也就是说,开发人员可以直接利用API 117,而不是要求开发人员使用阻塞进程间通信调用。
通过控制应用容器和容器运行时,运行时系统126可以代理API调用并验证应用容器和容器运行时没有被篡改,因此为敏感行为提供运行时逻辑。例如,请求访问用户的设备标识符(例如,设备的全局唯一标识符)的应用可能需要通过容器运行时的API调用,然后容器运行时的API可以向监管器组件128A检查以确保这种行为是允许的,或者甚至通过例如擦洗或假名化个人标识信息来修改该API的输出。通常,应用容器102可以允许对操作系统136的某些直接访问,可以允许经由代理的某些间接动作,并且还可以阻止对某些API的访问。以这种方式,容器运行时124可以在各种操作时强制保证这种检查发生,因为这种操作只能通过容器运行时124的API进行。此外,因为应用容器102的容器运行时124提供API117,所以可以在应用更新时执行对应用容器102的更新而不是需要对底层操作系统136的更新,这可以提高任何这种更新的采用率,这又可以提高操作平台的安全性。
容器运行时124还可以提供一个层在需要平台协调的API上迭代。例如,子封装可以声明它需要一些特定数据,例如位置,并且容器运行时124可以与加载特定子封装的可执行组件并行地获得位置,并且在应用启动时提供该位置作为自变量。作为一个示例,开发人员可以在应用的元数据中指定执行应用需要一些依赖性数据。容器运行时124不仅可以检索和开始执行应用的应用代码,而且可以并行地识别和检索依赖性数据。在一些情况下,开发人员可以指定依赖性数据是强制的(即,应用执行所必需的)还是“尽力服务(besteffort)”(即,改进应用的操作/功能,但不是应用执行所必需的严格要求)。强制依赖性数据的示例可以是显示应用的基本用户界面所必需的数据。对于“尽力服务”依赖性数据,即使容器运行时124尚未接收到“尽力服务”依赖性数据,容器运行时124也可以在应用代码被下载并可用于执行时立即开始执行应用代码。
例如,考虑一个简单的应用,它显示特定州的所有州公园,但也支持显示附近公园的模式。开发人员可以如下指定应用的元数据要求:
如果用户执行应用并导航到初始应用屏幕(其可以对应于URL“/”),则容器运行时124可以并行地开始下载home_screen atom(例如,从远程计算设备142A下载子封装146之一),请求广告创意、并发起全球定位。在容器运行时124在获得全球定位系统定位之前完成home_screen atom的下载的情况下,应用容器102A可以使得公园列表与空白空间一起显示,在该空白空间中,原本将显示从计算设备100的当前位置到每个公园的距离,还有用于显示广告创意的区域。一旦容器运行时124完成了广告创意的检索和加载,应用容器102A更新图形用户界面以包括广告。类似地,一旦容器运行时124能够获得计算设备100的当前位置(即,GPS定位),应用容器102A可以更新图形用户界面以包括当前位置距每个公园的相应距离。
如果用户在容器运行时124获得计算设备100的当前位置之前导航到附近的公园应用屏幕(其可以对应于url“/nearby”),则容器运行时124将不执行nearby_screen atom和显示附近的公园应用屏幕,直到容器运行时124接收到当前位置信息为止,因为开发人员指定了执行nearby_screeen atom需要该位置。以这种方式,开发人员不需要专门处理应用等待接收位置信息的情况,而是可以依赖容器运行时124来处理这种情况。
容器运行时124可自动确定并主动检索应用的数据。例如,虽然州公园应用示例被描述为具有由开发人员在元数据中明确定义的层级结构,但是在各种示例中,开发人员不需要在元数据中定义应用结构。相反,容器运行时124可以在不需要开发人员指定数据依赖项的情况下分析应用代码、确定应用可能需要的数据、乐观地检索应用需要的数据。也就是说,应用容器102可以通过提供良好的运行时依赖项满足来消除在某些情况下对静态库的需要。由于应用代码由应用容器102运行,所以容器运行时124可以首先通过理解应用元数据来确定应用的依赖项,包括相关版本控制规则,满足这些依赖项,然后开始执行应用代码。此外,因为应用容器102和运行时系统126在操作系统136之外操作,所以不需要修改操作系统136以支持本公开的技术。
本公开的技术还可以使得容器运行时124能够执行附加应用代码以及附加代码的数据依赖项的乐观预取。在一些例子中,容器运行时124可预测可能需要附加代码以提供应用的某些功能(例如,对于常用特征)并主动检索附加代码。例如,容器运行时124可以预测加载导航应用的用户也可能请求方向,方向功能可能在与为导航应用提供初始用户界面的子封装不同的子封装中。容器运行时124可以检索附加代码(例如,从远程计算设备142A下载子封装146之一、加载存储在计算设备100处的子封装104等),识别附加代码的任何数据依赖项,并预取附加代码的数据依赖项。换句话说,容器运行时124可以确定应用容器102可能需要的应用代码,并获取它,同时还获取代码所依赖的数据。相反,仅预取代码的系统等待获取必需数据,直到实际执行该代码。
如下面进一步描述的,通过允许软件开发人员设计具有用于单独功能集的单独子封装的应用,应用容器102可以使得应用能够在不需要其所有子封装的所有相应执行组件本地驻留在计算设备100上的情况下在计算设备100处执行子封装。以这种方式,应用的初始执行可能不需要检索和/或安装所有子封装,而是仅需要包括实现所请求功能的可执行组件的子封装的子集。此外,通过将多个可执行组件封装在单个子封装中,可执行组件的检索和/或安装可以根据所请求的功能(例如,呈现特定用户界面)在子封装的基础上发生,而不是在逐个可执行组件的基础上检索和安装可执行组件,这样可能性能较差和/或导致用户体验较差。
如上所述,每个应用可以用包括定义应用的操作的一个或多个可执行组件的应用容器来执行。应用容器102A包括路由器112,该路由器112从可执行组件108和消息收发接口115发送和接收消息,该消息改变应用的行为和/或使应用执行一个或多个操作。例如,路由器112可以接收请求执行一个或多个操作的消息。路由器112可以基于消息的内容来确定包括用于执行一个或多个操作的可执行组件的子封装是否在计算设备100上本地存储或以其它方式可访问。消息的内容可以包括标识符,诸如对应于子封装的统一资源标识符(URI)。如果子封装在计算设备100上本地存储或以其它方式可访问,则路由器112基于消息的内容识别用于执行操作的一个或多个可执行组件。在一些示例中,消息可以包括进一步指定要执行的一个或多个操作的附加属性(例如,用于启动用户界面的类别、数据的MIME类型、用于执行的显式组件类)或数据(例如,用户数据或机器生成的数据)。这样,路由器112识别的一个或多个可执行组件可以基于附加属性或数据来执行一个或多个操作。
如上所述,不是用于特定应用的所有子封装都需要本地驻留在计算设备100处以执行该应用。为了确定用于特定功能的子封装是否驻留在计算设备100或以其它方式可访问,路由器112可以对应用定义116执行查找。应用定义116通常可以定义用户指定的标识符(例如URI、字符串、整数或任何其它合适的标识符)和为应用指定特定功能的子封装之间的映射。应用定义116包括路由表118中的这些映射,路由表118包括用户指定标识符120A-120N(“用户指定标识符120”)和子封装标识符122A-122N(“子封装标识符122”)之间的映射。如果路由器112接收到具有用户指定标识符的消息以使用特定子封装执行功能,则路由器112可以在路由表118中执行查找。如果路由器112确定用户指定标识符120A例如与消息中的用户指定标识符匹配,则路由器112可以确定对应于子封装标识符122A的子封装104A是否驻留在计算设备100上。由于子封装104A驻留在计算设备100上,所以路由器112基于该消息执行对子封装104A的调用,或者将该消息发送到子封装104A,子封装104A使用可执行组件108A执行一个或多个操作。
如上所述,因为用于应用的整个子封装集不需要都本地存储在计算设备100上,所以应用在计算设备100处的初始安装和/或初始执行需要的时间可能比整个应用需要从远程计算设备下载、安装和执行所要的时间少。这样,用户可以体验来自应用的更大响应性和/或应用行为的更大性能。
在图1的示例中,用户可能希望如上所述初始安装和执行导航应用。最初,导航应用的子封装或应用定义可能都未存储在计算设备100处。用户可以向计算设备100提供用户输入以初始地选择由操作系统136提供的用户界面中对应于地图应用的图标。替代地,用户可以在媒体商店应用(未示出)中选择地图应用,该媒体商店应用在计算设备100处执行并且与远程计算设备142通信以检索子封装和应用定义。在任何情况下,监管器组件128A的消息代理130都从操作系统136或媒体商店应用接收请求执行导航应用的特定功能的消息。由于导航应用尚未安装,因此请求的特定功能是显示应用的默认或主用户界面。
监管器组件128A可以基于消息的内容来确定是否已经在计算设备100的存储器中为导航应用分配了应用容器。例如,消息的内容可以包括导航应用的唯一标识符,诸如应用的名称。响应于确定监管器组件128A还没有为导航应用分配应用容器,监管器组件128A可以从应用容器池132分配应用容器102A。应用容器池132可包括为执行应用而保留并可用于执行应用的进程集合。在一些示例中,监管器组件128A可以与操作系统136通信以创建应用容器102A的新进程。
监管器组件128A可以确定导航应用尚未安装,并向一个或多个远程计算设备142请求应用定义。例如,监管器组件128A可以向远程计算设备142A发送消息,其中该消息包括在远程计算设备142中全局唯一的导航应用标识符。远程计算设备142A在接收到该消息时从应用定义144中选择应用定义116,并将应用定义116发送到计算设备100。监管器组件128A接收应用定义116,该应用定义116可以包括在应用容器102A中或可由应用容器102A访问。
监管器组件128A使消息代理130向应用容器102A发送消息,以显示应用的默认或主用户界面。特别地,消息可以包括用户指定的标识符,该标识符与具有显示应用的默认或主用户界面的功能的子封装相对应。在一些示例中,消息代理130基于从媒体中心应用或从与最初由用户选择的映射应用的图标相关联的引导功能接收(或生成)用户指定的标识符。引导功能可以包括但不限于向消息代理130发送用户指定的标识符。
路由器112经由消息接口115接收带有用户指定标识符的消息。在图1的这个示例中,用户指定的标识符是120A。基于用户指定标识符,路由器112确定对应于用户指定标识符120A的子封装标识符122A的子封装没有本地存储在计算设备100处。路由器112可以使用容器运行时124和/或运行时系统126向远程计算设备142A发送消息,以请求子封装标识符122A的子封装。例如,由容器运行时124和/或运行时系统126发送到远程计算设备142A的消息可以包括子封装标识符122A。远程计算设备142A可以向计算设备100发送子封装,该子封装包括用于显示导航应用的默认或主用户界面的可执行组件。
路由器112响应于确定子封装标识符122A的子封装不是本地存储的,可以使得生命周期管理器110经由回调接口113监听系统生命周期调用,其中生命周期调用由运行时系统126发出。生命周期调用可以包括启动应用、暂停应用、重新启动应用或终止应用,仅举几个例子。一旦计算设备100已经从远程计算设备142A检索到子封装104A,生命周期管理器110可以缓冲将由子封装104A的可执行组件执行的生命周期调用。一旦计算设备100已经检索到子封装104A,生命周期管理器110就可以将每个缓冲的生命周期调用发送到子封装104A。
在图1的示例中,当生命周期管理器110确定计算设备100已经检索并在本地存储子封装104A时,生命周期管理器110发送调用或以其它方式调用加载器106以将一个或多个可执行组件108加载到计算设备100的存储器中,以便执行初始请求的特定功能,例如显示应用的默认或主用户界面。在一些示例中,加载器106负责将可执行组件加载到存储器中。在一些示例中,加载器106可以表示多个加载器,其中每个加载器负责将不同的可执行组件加载到存储器中。对于特定可执行组件,加载器106可定位由特定可执行组件使用的对应库,并将任何这样的库加载到存储器中,使得库可被特定可执行组件访问。生命周期管理器110还可以将缓冲的生命周期调用发送到一个或多个可执行组件108。在接收到缓冲的生命周期调用时,一个或多个可执行组件108使得计算设备100显示应用的默认用户界面或主用户界面。
在稍后的时间,如果用户希望导航到设置用户界面,则用户可以提供用户输入,该用户输入在应用的当前显示的默认或主用户界面中选择设置用的用户界面元素(例如,图标、按钮、标签等)。运行时系统126向应用容器102A发送指示对用户界面元素的选择的消息。可执行组件108A确定选择显示了设置用户界面。可执行组件108A生成带有子封装122N的用户指定标识符120N的消息,该消息包括用于设置用户界面的功能。可执行组件108A可以将消息直接发送到路由器112,或者发送到运行时系统126,运行时系统126又将消息路由回路由器112。在任一情况下,路由器112执行对用户指定标识符120N的查找,并且确定子封装标识符122N的子封装没有本地存储在计算设备100处。
以类似的方式,如上面关于子封装104A所描述的,路由器112使用容器运行时124和/或运行时系统126向远程计算设备142A发送消息,以检索子封装标识符122N的子封装。远程计算设备142A可以向计算设备100发送子封装122N,该子封装包括用于显示导航应用的设置界面的可执行组件。当计算设备100正在检索子封装122N时,生命周期管理器110可以缓冲在回调接口113处接收的生命周期调用。在下载子封装122N后,生命周期管理器110使加载器106将子封装122N的可执行组件加载到存储器中。加载器106可以发起一个或多个可执行组件的执行,以使得导航应用的设置界面被显示在计算设备100的显示设备处。
图2是示出根据本公开的一个或多个方面的计算设备100的进一步细节的框图。图2仅示出了计算设备100的一个特定示例。计算设备100的许多其它示例可用于其它例子,并且可包括示例计算设备100中包括的组件的子集,或者可包括图2中未示出的示例计算设备100的附加组件。
如图2的示例所示,计算设备100包括一个或多个处理器240、一个或多个输入组件242、一个或多个通信单元244、一个或多个输出组件246、一个或多个存储设备248和存在敏感显示器252。计算设备100的存储设备248包括应用容器102、系统运行时128和操作系统136。通信信道250可将组件240、242、244、246、248、252、254和/或256中的每一个相互连接以用于组件间通信(物理地、通信地和/或操作地)。在一些示例中,通信信道250可以包括系统总线、网络连接、一个或多个进程间通信数据结构、或用于在硬件和/或软件之间传送数据的任何其它组件。
一个或多个处理器240可以在计算设备100内实现功能和/或执行指令。例如,计算设备100上的处理器240可以接收并执行由存储设备248存储的提供操作系统136、应用容器102和系统运行时126的功能的指令。由处理器240执行的这些指令可以使得计算设备100在程序执行期间在存储设备248内存储和/或修改信息。处理器240可以执行操作系统136、应用容器102和系统运行时126的指令以执行一个或多个操作。即,操作系统136、应用容器102和系统运行时126可由处理器240操作以执行本公开中描述的各种功能。
计算设备100的一个或多个输入组件242可以接收输入。输入的例子是触觉、音频、动力和光学输入,仅举几个例子。在一个示例中,计算设备100的输入组件242包括鼠标、键盘、语音响应系统、摄像机、按钮、控制面板、麦克风或用于检测来自人或机器的输入的任何其它类型的设备。在一些示例中,输入组件242可以是存在敏感输入组件,其可以包括存在敏感屏幕、触摸敏感屏幕等。
计算设备100的一个或多个输出组件246可以生成输出。输出的示例是触觉、音频和视频输出。在一些示例中,计算设备100的输出组件246包括存在敏感屏幕、声卡、视频图形适配器卡、扬声器、阴极射线管(CRT)监视器、液晶显示器(LCD)或用于生成对人或机器的输出的任何其它类型的设备。输出组件可包括显示组件,例如阴极射线管(CRT)监视器、液晶显示器(LCD)、发光二极管(LED)或用于生成触觉、音频和/或视觉输出的任何其它类型的设备。
在一些示例中,计算设备100的存在敏感显示器252可以包括输入组件242和/或输出组件246的功能。在图2的示例中,存在敏感显示器252可以包括存在敏感输入组件256,诸如存在敏感屏幕或触摸敏感屏幕。在一些示例中,存在敏感输入组件256可以检测存在敏感输入组件处和/或附近的对象。作为一个示例范围,存在敏感输入组件256可以检测在存在敏感输入组件256的两英寸或更小范围内的对象,例如手指或触笔。存在敏感输入组件256可以确定检测到对象的存在敏感输入组件的位置(例如,(x,y)坐标)。在另一示例范围中,存在敏感输入组件256可以检测离存在敏感输入组件256两英寸或更近的对象,并且其它范围也是可能的。存在敏感输入组件256可以使用电容性、电感性和/或光学识别技术来确定由用户手指选择的存在敏感输入组件256的位置。
在一些示例中,存在敏感显示器252还可以使用如关于输出组件246所描述的触觉、音频或视频刺激来向用户提供输出。例如,存在敏感显示器252可以包括呈现图形用户界面的显示组件254。显示组件254可以是提供视觉输出的任何类型的输出组件,例如关于输出组件246所描述的。虽然示出为计算设备100的集成组件,但在一些示例中,存在敏感显示器252可以是与计算设备100的其它组件共享数据路径以传输和/或接收输入和输出的外部组件。例如,存在敏感显示器252可以是计算设备100的内置组件(例如,移动电话上的屏幕),其位于计算设备100的外部封装内并物理连接到计算设备100的外部封装。在另一示例中,存在敏感显示器252可以是计算设备100的外部组件(例如,监视器、投影仪等,与平板计算机共享有线和/或无线数据路径),该外部组件位于计算设备100的封装外部并且与计算设备100的封装物理分离。在一些示例中,当存在敏感显示器252位于计算设备100的封装外部并且与计算设备100的封装物理分离时,存在敏感显示器252可以由两个单独的组件实现:用于接收输入的存在敏感输入组件256和用于提供输出的显示组件254。
计算设备100的一个或多个通信单元244可以通过传输和/或接收数据与外部设备通信。例如,计算设备100可以使用通信单元244在诸如蜂窝无线电网络的无线电网络上传输和/或接收无线电信号。在一些示例中,通信单元244可以在诸如全球定位系统(GPS)网络的卫星网络上传输和/或接收卫星信号。通信单元244的示例包括网络接口卡(例如以太网卡)、光收发器、射频收发器、GPS接收器或能够发送和/或接收信息的任何其它类型的设备。通信单元244的其它示例可以包括在移动设备中找到的
如图2所示,计算设备100可以包括电源258。在一些示例中,电源258可以是电池。电源258可以向计算设备100的一个或多个组件提供电力。电源258的示例可包括但不限于具有锌-碳、铅-酸、镍镉(NiCd)、镍金属氢化物(NiMH)、锂离子(Li-ion)和/或锂离子聚合物(Li-ion聚合物)化学物质的电池。在一些示例中,电源258可以具有有限的容量(例如,1000-3000mAh)。
计算设备100内的一个或多个存储设备248可以存储用于在计算设备100的操作期间处理的信息。在一些示例中,存储设备248是临时存储器,这意味着存储设备248的主要目的不是长期存储。计算设备100上的存储设备248可配置成像易失性存储器一样短期存储信息,且因此如果停用则不保留所存储内容。易失性存储器的示例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)和本领域已知的其它形式的易失性存储器。
在一些示例中,存储设备248还包括一个或多个计算机可读存储介质。存储设备248可配置成存储比易失性存储器更大量的信息。存储设备248可进一步配置成像非易失性存储器空间一样长期存储信息且在激活/关闭循环之后保留信息。非易失性存储器的示例包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除可编程存储器(EEPROM)的形式。存储设备248可以存储与操作系统136、系统运行时126和应用容器102相关联的程序指令和/或数据。
每个相应的应用容器102可以对应于不同的应用。例如,操作系统可以包括允许用户基于对应于不同应用的相应图标来选择不同应用(例如,从菜单或图标网格)的用户界面。例如,用户可以从操作系统用户界面选择电子邮件客户端图标,该图标使得电子邮件客户端应用以其自己的单独应用容器执行。与应用容器不同,web浏览器的扩展或其它子应用(例如插件、JavaScript、Java虚拟机等)可以不被表示为要在操作系统的用户界面中启动的单独应用。例如,即使web浏览器为选项卡式界面的每个选项卡创建了单独的进程,每个选项卡也可以不像不同的可启动应用一样被表示为操作系统的用户界面内的单独应用。
如本公开中所描述的,应用容器可以不同于web浏览器,因为应用容器可以包括容器运行时。如本公开中所描述的,应用容器的容器运行时可以包括库,但是也可以向应用容器内的子封装的可执行组件公开操作系统API。与应用容器不同,web浏览器可能不向web浏览器内的扩展或其它子应用公开这种操作系统API,甚至可能阻止web浏览器内的扩展或其它子应用对这种操作系统API的访问。
如本公开中所描述的,应用容器可以不同于web浏览器,因为应用容器可以从应用容器外部的监管器组件(例如,在运行时系统或操作系统中)接收用户指定的标识符(例如,URI),其可以使得在没有附加用户干预的情况下检索改变应用的执行行为或外观的子封装。用户指定的标识符可以源自在相同计算设备或不同计算设备上执行的其它应用,并且在被应用容器接收时可以自动改变应用的执行行为或外观。相反,web浏览器可以在web浏览器本身内接收用户输入(例如,输入URL的文本),而不是从应用容器外部的源接收用户输入,例如,从监管器组件或web浏览器外部的另一应用。另外,web浏览器可以不包括路由器和/或应用定义,如在本公开的应用容器内所描述的,以执行用户指定标识符的查找并改变由应用容器表示的应用的执行。与应用容器不同,web浏览器可能不包括回调接口,回调接口接收并缓冲生命周期调用以更改应用容器内子封装的操作。
在一些示例中,web浏览器可以包括核心功能(例如,呈现引擎)和一个或多个第三方扩展、插件和/或子应用。web浏览器与应用容器不同,在web浏览器的所有核心功能没有本地存储并且可供计算设备用于执行的情况下,web浏览器可能根本不能正常工作或执行。相比之下,应用容器可以仅利用被本地存储并且可供计算设备用于执行的其核心功能的子集(例如,只有用于用户界面的子集的子封装)正常工作。
根据本公开的技术,系统运行时126接收执行应用的请求。例如,用户可以在存在敏感显示器204处提供用户输入以执行应用或应用的特定功能。存在敏感显示器204可以使系统运行时126生成对应于对应用的图标的选择的事件。响应于接收到用户输入的指示,系统运行时126可以确定是否为应用分配了至少一个应用容器102。
响应于确定用于维护应用的可安装子封装的应用容器未被分配在存储组件248的易失性存储器中,系统运行时126从远程计算设备检索应用定义。例如,系统运行时126使通信单元244之一向远程计算设备发送对应用定义的请求。应用定义可以定义应用的可安装子封装与用户指定标识符之间的多个映射。
响应于在计算设备100的易失性存储器中分配应用容器102A或者响应于确定已经在计算设备100的存储器中分配了应用容器102,系统运行时126可以至少部分地基于请求的用户指定的标识符,通过例如向应用容器102A发送命令来发起应用的特定功能。
应用容器102A可以确定应用或应用的特定功能的多个依赖项。例如,应用容器102A可以解析应用的元数据,诸如清单文件或应用的其它信息。基于配置文件,应用容器102A可以确定应用的多个依赖项或应用的特定功能。作为另一示例,应用容器102A可以从远程服务器检索从应用的启发式分析导出的依赖项信息。
在一些示例中,多个依赖项可以包括一个或多个必需依赖项和一个或多个可选依赖项。如果需要依赖项来执行应用和/或提供应用的特定功能,则依赖项是必需依赖项。例如,应用容器102A可以确定包括用于应用的特定功能的程序代码的子封装是必需依赖项。作为另一示例,如果用户请求的特定功能是导航功能,则应用容器102A可以确定位置信息是必需依赖项。如果不需要依赖项来执行应用和/或提供应用的特定功能,则依赖项是可选的依赖项。例如,如果依赖项是由应用呈现的新故事的图像数据,则应用容器102A可以确定依赖项是可选的依赖项。作为另一示例,如果用户请求的特定功能是关于特定品牌的信息,则应用容器102A可以确定位置信息是可选的依赖项。然而,如果用户然后选择查找应用的商店功能,则应用容器102A可以确定位置信息现在是必需依赖项,因为现在可能需要位置信息来标识位于计算设备100的当前位置附近的商店。
响应于确定一个或多个必需的和/或一个或多个可选的依赖项当前没有存储在计算设备100处和/或可供应用容器102A使用,应用容器102A发起对一个或多个必需依赖项和/或一个或多个可选的依赖项的检索。例如,如果必需依赖项之一是用于应用的特定功能的可安装子封装,则应用容器102A可以从远程计算设备检索包括多个可执行组件的可安装子封装。类似地,如果一个或多个可选依赖项中的任何一个包括未存储在计算设备100中的信息(例如,文本数据、图像数据、音频数据、视频数据、第三方数据等),但是在远程计算设备处可用,则应用容器102A可以从远程计算设备检索数据。远程计算设备可以是包括应用定义的相同计算设备或不同计算设备。在一些示例中,如果计算设备不同,则它们可以由公共操作员操作。此外,远程计算设备可以包括另外两个远程计算设备。在一些示例中,应用容器102A可以从第一数据源(例如,第一远程计算设备)检索一个或多个必需依赖项,并且从不同于第一数据源的第二数据源(例如,不同的第二远程计算设备)检索一个或多个可选依赖项。
一旦计算设备100接收到必需依赖项,应用容器102A就执行应用或用户所必需的应用的特定功能。即,即使一个或多个可选依赖项的至少一部分还没有被接收到,应用容器102A也可以执行应用和/或应用的特定功能。换句话说,响应于接收到一个或多个必需依赖项中的所有依赖项,并且当可选依赖项中的至少一个尚未被应用容器102A接收到时,计算设备100可以执行应用。
在一些示例中,计算设备100在接收所有可选依赖项之前开始执行应用,计算设备100可以输出应用的图形用户界面以供显示(例如,通过存在敏感显示器252),该图形用户界面包括应用容器102A尚未接收的一个或多个可选依赖项中的至少一个的占位符图形元素。响应于接收到所述一个或多个可选依赖项中的至少一个,计算设备100可以输出与所述至少一个可选依赖项相关联的信息以代替占位符元素用于显示。
应用容器102A可以预取应用的附加可安装子封装、应用的附加数据或用户可能使用的任何其它依赖项(必需的或可选的)。也就是说,计算设备100可以预期用户可能请求的附加功能(例如,基于来自其他用户的使用数据、用户的历史使用模式等),并主动检索相应的必需依赖项,在某些情况下,还检索可选依赖项。在一些示例中,计算设备100可以基于包括在一个或多个可选依赖项中的数据来确定被配置为使用包括在一个或多个可选依赖项中的数据的应用的一个或多个可安装子封装。换句话说,计算设备100可以识别使用计算设备100接收的可选依赖项中包括的数据的应用的其它特征。在这种情况下,应用容器102可以预取被配置为使用数据的应用的一个或多个可安装子封装中的至少一个。
图3是示出根据本公开的技术的具有用于动态加载应用依赖项的应用容器的计算设备的示例操作的流程图。仅出于说明的目的,以下在图1的计算设备100的场境中描述示例操作。
在图3中,计算设备100可以初始地接收执行应用的特定功能的请求(300)。例如,用户可以在计算设备100处提供用户输入以启动应用,并且计算设备100的监管器组件128A可以接收用户输入的指示作为执行应用的请求。监管器组件128A可以确定是否在计算设备100的存储器(例如,图2的存储组件248之一)中分配了用于维护应用的可安装子封装的应用容器(例如,应用容器102之一,诸如应用容器102A)(302)。
响应于确定未在存储器中分配用于维护应用的可安装子封装的应用容器(302的“否”分支),计算设备100可以分配应用容器(例如,应用容器102A)(304)。例如,计算设备100可以通过例如向远程计算系统发送包括应用的唯一标识符的请求来从远程计算系统检索应用定义。远程计算系统可以执行查找并识别相应的应用定义。远程计算系统可以向计算设备100发送应用定义。计算设备100可以从远程计算系统接收应用定义,并且在计算设备100的存储器中为应用分配应用容器102A。
响应于在存储器中分配应用容器或者响应于确定已经在存储器中分配了应用容器(302的“是”分支),应用容器102A可以确定应用的特定功能的一个或多个必需依赖项和一个或多个可选依赖项(306)。例如,应用容器102A的容器运行时124可以解析应用的元数据以确定一个或多个必需依赖项和一个或多个可选依赖项。作为另一示例,应用容器102A可以使得计算设备100从远程服务器检索从应用的启发式分析导出的依赖项信息。所述一个或多个必需依赖项可包括应用的可安装子封装集合或位置数据中的一个或多个。一个或多个可选依赖项可以包括应用数据、图像数据、用户数据、位置数据或第三方数据中的一个或多个。
应用容器102A启动对所确定的一个或多个必需依赖项和所确定的一个或多个可选依赖项的检索(308)。在一些示例中,容器运行时124从第一数据源检索一个或多个必需依赖项,并且从与第一数据源不同的第二数据源检索一个或多个可选依赖项。
在接收到所有可选依赖项之前并且在接收到所有必需依赖项之后,计算设备100执行应用(310)。也就是说,计算设备100可以使用应用容器102A来执行应用,即使计算设备100没有接收到所有可选的依赖项。在一些示例中,可选依赖项包括图像数据。在这样的示例中,应用容器102A可以确定计算设备100是否已经接收到所有可选依赖项图像数据。如果计算设备100尚未接收到所有可选依赖项图像数据,则计算设备100可以输出应用的图形用户界面以供显示,该图形用户界面包括容器运行时124尚未接收到的一个或多个可选依赖项中的至少一个的占位符图形元素。如果计算设备100已经接收到所有可选依赖项图像数据(包括在占位符图形元素可能已经被包括在图形用户界面中之后接收到的可选依赖项图像数据),则计算设备100可以代替占位符元素输出与至少一个可选依赖项相关联的信息以供显示。
在一些示例中,计算设备100可以被配置为预取应用的附加可安装子封装(312)。在这样的示例中,计算设备100可以基于包括在一个或多个可选依赖项中的数据来确定被配置为使用包括在一个或多个可选依赖项中的数据的应用的一个或多个可安装子封装,并且可以预取被配置为使用该数据的应用的一个或多个可安装子封装中的至少一个。以这种方式,计算设备100可以主动检索可能由计算设备100的用户使用的附加功能,这样可以减少在用户请求功能时加载这种功能所需的时间量。
示例1。一种方法,包括:由在计算设备处执行的监管器组件接收执行应用的请求;由所述监管器组件确定是否在所述计算设备的存储器中分配了用于维护所述应用的可安装子封装的应用容器;响应于确定在所述计算设备的存储器中分配了所述应用程序容器,由所述应用容器的容器运行时确定所述应用的一个或多个依赖项,其中所述一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项;由容器运行时发起对所述一个或多个必需依赖项的检索;由容器运行时发起对所述一个或多个可选依赖项的检索;以及响应于接收到所述一个或多个必需依赖项中的所有必需依赖项,并且当所述可选依赖项中的至少一个可选依赖项尚未被所述容器运行时接收到时,由所述计算设备执行所述应用。
示例2。根据示例1所述的方法,其中,执行所述应用包括:由所述计算设备输出所述应用的图形用户界面以供显示,所述图形用户界面包括所述容器运行时尚未接收到的所述一个或多个可选依赖项中的所述至少一个的占位符图形元素;以及响应于接收到所述一个或多个可选依赖项中的所述至少一个,由所述计算设备输出与所述至少一个可选依赖项相关联的信息代替所述占位符元素以供显示。
示例3。根据示例1和2的任意组合所述的方法,还包括:由所述计算设备并基于包括在所述一个或多个可选依赖项中的数据,确定被配置为使用包括在所述一个或多个可选依赖项中的数据的所述应用的一个或多个可安装子封装;以及由应用容器预取被配置为使用该数据的应用的所述一个或多个可安装子封装中的至少一个。
示例4。根据示例1-3的任意组合所述的方法,其中,确定所述应用的所述一个或多个依赖项包括从远程服务器检索从所述应用的启发式分析导出的依赖项信息。
示例5。根据示例1-4的任意组合所述的方法,其中,确定所述应用的所述一个或多个依赖项包括由所述容器运行时解析所述应用的元数据。
示例6。根据示例1-5的任意组合所述的方法,其中,容器运行时从第一数据源检索所述一个或多个必需依赖项,并且从与第一数据源不同的第二数据源检索所述一个或多个可选依赖项。
示例7。根据示例1-6的任意组合所述的方法,其中,所述一个或多个必需依赖项包括所述应用的可安装子封装集合或位置数据中的一个或多个,并且其中,所述一个或多个可选依赖项包括应用数据、图像数据、用户数据、位置数据或第三方数据中的一个或多个。
示例8。根据示例1-7的任意组合所述的方法,其中,所述监管器组件不同于在所述计算设备处执行的操作系统,并且其中,所述应用容器包括多个不同应用的公共功能集合。
示例9。一种计算设备,包括:一个或多个存储组件,所述一个或多个存储组件存储监管器组件;以及一个或多个处理器,所述一个或多个处理器执行监管器组件以:接收执行应用的请求;以及确定是否在所述一个或多个存储组件中分配了用于维护所述应用程序的可安装子封装的应用程序容器,其中,响应于所述监管器组件确定在所述计算设备的存储器中分配了所述应用程序容器,所述应用容器的容器运行时间能够由所述一个或多个处理器执行以:确定所述应用的一个或多个依赖项,其中所述一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项;发起对一个或多个必需依赖项的检索;发起对一个或多个可选依赖项的检索;以及响应于接收到所述一个或多个必需依赖项中的所有必需依赖项,并且当可选依赖项中的至少一个可选依赖项尚未被所述容器运行时接收到时,执行所述应用。
示例10。根据示例9所述的计算设备,其中,所述容器运行时能够进一步由所述一个或多个处理器执行以:输出所述应用的图形用户界面以供显示,所述图形用户界面包括用于所述容器运行时尚未接收到的所述一个或多个可选依赖项中的至少一个的占位符图形元素;以及响应于接收到所述一个或多个可选依赖项中的所述至少一个,输出与所述至少一个可选依赖项相关联的信息代替占位符元素以供显示。
示例11。根据示例9和10的任意组合所述的计算设备,其中,所述应用容器能够由所述一个或多个处理器执行以:基于包括在所述一个或多个可选依赖项中的数据,确定被配置为使用包括在所述一个或多个可选依赖项中的数据的所述应用的一个或多个可安装子封装;以及预取被配置为使用所述数据的应用的一个或多个可安装子封装中的至少一个。
示例12。根据示例9-11的任意组合所述的计算设备,其中,容器运行时能够由一个或多个处理器执行以通过至少可执行以解析应用的元数据来确定一个或多个可选依赖项。
示例13。根据示例9-12的任意组合所述的计算设备,其中,容器运行时能够由一个或多个处理器执行以通过至少可执行以从远程服务器检索从对应用的启发式分析导出的依赖项信息来确定一个或多个可选依赖项。
示例14。根据示例9-13的任意组合所述的计算设备,其中,容器运行时能够由一个或多个处理器执行以从第一数据源检索一个或多个必需依赖项,并且从与第一数据源不同的第二数据源检索一个或多个可选依赖项。
示例15。根据示例9-14的任意组合所述的计算设备,其中,所述一个或多个必需依赖项包括所述应用的可安装子封装集合或位置数据中的一个或多个,并且其中,所述一个或多个可选依赖项包括应用数据、图像数据、用户数据、位置数据或第三方数据中的一个或多个。
示例16。根据示例9-15的任意组合所述的计算设备,其中:所述一个或多个存储组件还存储操作系统;监管器组件与操作系统不同;并且应用容器包括用于多个不同应用的公共功能集合。
示例17。一种编码有指令的非暂时性计算机可读存储介质,所述指令当由计算设备的一个或多个处理器执行时,使得所述一个或多个处理器:接收执行应用的请求;确定是否在计算设备的存储器中分配了用于维护应用的可安装子封装的应用容器;响应于确定在所述计算设备的存储器中分配了所述应用容器,确定所述应用的一个或多个依赖项,其中,所述一个或多个依赖项包括一个或多个必需依赖项和一个或多个可选依赖项;发起对所述一个或多个必需依赖项的检索;发起对所述一个或多个可选依赖项的检索;以及响应于接收到一个或多个必需依赖项中的所有必需依赖项,并且当所述可选依赖项中的至少一个可选依赖项尚未被容器运行时接收到时,执行应用。
示例18。根据示例17所述的非暂时性计算机可读存储介质,其中,所述指令通过至少使所述一个或多个处理器从远程服务器检索从对所述应用的启发式分析导出的依赖项信息或解析所述应用的元数据来使所述一个或多个处理器确定所述一个或多个依赖项。
示例19。根据示例17和18的任意组合所述的非暂时性计算机可读存储介质,其中,所述指令使得所述一个或多个处理器:输出应用的图形用户界面以供显示,所述图形用户界面包括尚未接收到的一个或多个可选依赖项中的至少一个的占位符图形元素;以及响应于接收到所述一个或多个可选依赖项中的所述至少一个,输出与所述至少一个可选依赖项相关联的信息代替占位符元素以供显示。
示例20。根据示例17-19的任意组合所述的非暂时性计算机可读存储介质,其中,所述指令使得所述一个或多个处理器:基于包括在所述一个或多个可选依赖项中的数据,确定被配置为使用包括在所述一个或多个可选依赖项中的数据的应用的一个或多个可安装子封装;以及预取被配置为使用数据的应用的一个或多个可安装子封装中的至少一个。
示例21。一种设备,包括用于执行根据示例1-8所述的方法的任意组合的装置。
示例22。一种编码有指令的计算机可读存储介质,所述指令在被执行时使得计算设备的一个或多个处理器执行根据示例1-8所述的方法的任意组合。
在一个或多个示例中,所描述的功能可以用硬件、软件、固件或其任意组合来实现。如果以软件实现,则这些功能可以作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质传输,并由基于硬件的处理单元执行。计算机可读介质可以包括对应于诸如数据存储介质之类的有形介质的计算机可读存储介质,或者包括便于例如根据通信协议将计算机程序从一个地方传送到另一个地方的任何介质的通信介质。以这种方式,计算机可读介质通常可以对应于(1)非暂时性的有形计算机可读存储介质或(2)诸如信号或载波的通信介质。数据存储介质可以是可由一个或多个计算机或一个或多个处理器访问以检索用于实现本公开中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。
作为示例而非限制,这种计算机可读存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储设备、磁盘存储设备或其它磁存储设备、闪存或可以用于存储指令或数据结构形式的期望程序代码并且可以由计算机访问的任何其它介质。而且,任何连接都适当地称为计算机可读介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字用户线路(DSL)或诸如红外、无线电和微波的无线技术从网站、服务器或其它远程源传输指令,则同轴电缆、光纤电缆、双绞线、DSL或诸如红外、无线电和微波的无线技术包括在介质的定义中。然而,应当理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其它瞬态介质,而是指非瞬态、有形存储介质。这里使用的磁盘和光盘包括压缩盘(CD)、激光盘、光盘、数字通用盘(DVD)、软盘和蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述的组合也应包括在计算机可读介质的范围内。
指令可由一个或多个处理器执行,例如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。因此,本文所使用的术语“处理器”可指任何前述结构或适于实现本文所述技术的任何其它结构。此外,在一些方面,这里描述的功能可以在专用硬件和/或软件模块内提供。而且,这些技术可以在一个或多个电路或逻辑元件中完全实现。
本公开的技术可以在多种设备或装置中实现,包括无线手机、集成电路(IC)或IC的集合(例如芯片集)。在本公开中描述了各种组件、模块或单元,以强调被配置为执行所公开的技术的设备的功能方面,但不一定需要由不同硬件单元实现。相反,如上所述,各种单元可以组合在硬件单元中,或者由包括如上所述的一个或多个处理器的互操作硬件单元的集合结合适当的软件和/或固件来提供。
已经描述了本公开的各个方面。这些和其它方面在所附权利要求的范围内。
- 使用应用容器管理代码和依赖性数据的传递
- 使用应用容器管理代码和依赖性数据的传递