基于消息的视图加载方法、装置、设备和存储介质与流程

文档序号:18213261发布日期:2019-07-19 22:27阅读:123来源:国知局
基于消息的视图加载方法、装置、设备和存储介质与流程

本发明实施例涉及计算机技术,尤其涉及一种基于消息的视图加载方法、装置、设备和存储介质。



背景技术:

目前,基于android系统开发的应用程序中,一个页面中的各个视图均是在该页面启动时进行加载的。如果页面中包含非常多的视图在页面启动时显示,那么在页面启动过程中就需要执行很多的视图加载操作,使得整个页面的启动过程耗时较长,导致页面启动速度变慢,影响用户体验。



技术实现要素:

本发明实施例提供一种基于消息的视图加载方法、装置、设备和存储介质,以实现页面中各个视图的分散式加载,提高页面启动速度。

第一方面,本发明实施例提供了一种基于消息的视图加载方法,包括:

在接收到触发视图加载的功能启动消息时,依据所述功能启动消息确定目标视图的目标视图标识;

以所述目标视图标识为输入参数,通过对象集合调用对象获取函数,获得所述目标视图标识对应的目标视图协议对象,其中,所述对象集合用于存储各视图标识及与每个所述视图标识对应的视图协议对象,所述视图协议对象为初始视图类基于预先定义的视图加载协议而生成;

通过所述目标视图协议对象调用视图加载协议函数,以加载所述目标视图,其中,所述视图加载协议函数为所述视图加载协议中包含的协议函数。

可选地,在以所述目标视图标识为输入参数,通过对象集合调用对象获取函数,获得所述目标视图标识对应的目标视图协议对象之前,还包括:

在生成任一所述视图协议对象后,以所述视图协议对象的视图标识和所述视图协议对象为输入参数,通过消息分发对象调用对象注册函数,将所述视图协议对象的视图标识和所述视图协议对象存储至所述对象集合。

进一步地,生成视图协议对象包括:

所述初始视图类通过协议继承关键字继承所述视图加载协议,并复写所述视图加载协议中的协议函数,获得协议视图类及所述协议视图类中的所述视图加载协议函数;

依据所述协议视图类生成所述视图协议对象,所述视图协议对象为视图加载协议类型的视图对象。

可选地,所述对象集合具有私有权限修饰符,所述对象集合为预先定义的键值对类型的集合,且所述对象集合的键的类型为视图加载协议类型。

可选地,所述视图加载协议函数通过如下方式实现加载所述目标视图的功能:

以系统布局服务关键字为输入参数,通过上下文对象调用系统对象获取函数,获得系统加载对象;

以所述目标视图对应的布局文件标识为输入参数,通过所述系统加载对象调用视图布局函数,加载所述目标视图的布局文件,并生成视图类型的加载视图对象。

进一步地,在生成视图类型的加载视图对象之后,还包括:

分别以所述目标视图中的各子视图对应的子视图标识为输入参数,通过所述加载视图对象调用子视图查找函数,获得各子视图对象及每个所述子视图对象对应的加载信息,以填充所述目标视图。

第二方面,本发明实施例还提供了一种基于消息的视图加载装置,该装置包括:

目标视图标识确定模块,用于在接收到触发视图加载的功能启动消息时,依据所述功能启动消息确定目标视图的目标视图标识;

目标视图协议对象获取模块,用于以所述目标视图标识为输入参数,通过对象集合调用对象获取函数,获得所述目标视图标识对应的目标视图协议对象,其中,所述对象集合用于存储各视图标识及与每个所述视图标识对应的视图协议对象,所述视图协议对象为初始视图类基于预先定义的视图加载协议而生成;

目标视图加载模块,用于通过所述目标视图协议对象调用视图加载协议函数,以加载所述目标视图,其中,所述视图加载协议函数为所述视图加载协议中包含的协议函数。

可选地,在上述装置的基础上,该装置还包括对象存储模块,用于:

在以所述目标视图标识为输入参数,通过对象集合调用对象获取函数,获得所述目标视图标识对应的目标视图协议对象之前,在生成任一所述视图协议对象后,以所述视图协议对象的视图标识和所述视图协议对象为输入参数,通过消息分发对象调用对象注册函数,将所述视图协议对象的视图标识和所述视图协议对象存储至所述对象集合。

进一步地,所述对象存储模块包括视图协议对象生成子模块,用于通过如下方式生成所述视图协议对象:

所述初始视图类通过协议继承关键字继承所述视图加载协议,并复写所述视图加载协议中的协议函数,获得协议视图类及所述协议视图类中的所述视图加载协议函数;

依据所述协议视图类生成所述视图协议对象,所述视图协议对象为视图加载协议类型的视图对象。

可选地,所述对象集合具有私有权限修饰符,所述对象集合为预先定义的键值对类型的集合,且所述对象集合的键的类型为视图加载协议类型。

可选地,所述目标视图加载模块包括函数执行子模块,用于通过如下方式实现加载所述目标视图的功能:

以系统布局服务关键字为输入参数,通过上下文对象调用系统对象获取函数,获得系统加载对象;

以所述目标视图对应的布局文件标识为输入参数,通过所述系统加载对象调用视图布局函数,加载所述目标视图的布局文件,并生成视图类型的加载视图对象。

进一步地,函数执行子模块具体用于:

在生成视图类型的加载视图对象之后,分别以所述目标视图中的各子视图对应的子视图标识为输入参数,通过所述加载视图对象调用子视图查找函数,获得各子视图对象及每个所述子视图对象对应的加载信息,以填充所述目标视图。

第三方面,本发明实施例还提供了一种设备,该设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的基于消息的视图加载方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的基于消息的视图加载方法。

本发明实施例通过在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识;以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象;通过目标视图协议对象调用视图加载协议函数,以加载目标视图。实现了在消息分发器中根据所接收到的功能启动消息确定需要加载的目标视图并执行目标视图的加载操作,解决了页面中所有视图必须在页面启动时全部加载造成的页面启动慢的问题,达到了根据消息来将页面中的各个视图分散式加载,从而提高页面启动速度及提升用户体验的技术效果。

附图说明

图1是本发明实施例一中的一种基于消息的视图加载方法的流程图;

图2是本发明实施例二中的一种基于消息的视图加载装置的结构示意图;

图3是本发明实施例三中的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

本实施例提供的基于消息的视图加载方法可适用于基于android系统的应用程序启动情况。该方法可以由基于消息的视图加载装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在搭载android系统的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图1,本实施例的方法包括:

s110、在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识。

其中,功能启动消息是指触发控件执行控件功能的第一个消息,该消息的下发时机与具体地业务需求相关,例如可以是在需要显示目标视图时再下发,而不是目标视图所在的页面启动时下发。功能启动消息中至少包含其对应的视图标识及消息内容。目标视图是需要加载的视图。目标视图标识是目标视图的标识,其可以是名称、代称或其他能够唯一表征目标视图的数字、字母和符号等中的至少一种。

具体地,视图加载装置接收到一个功能启动消息时,便可以解析该功能启动消息,从而获得消息中包含的视图标识,即通过功能启动消息来获得目标视图的目标视图标识。消息的接收通常设置有消息接收通道,也可称为消息分发器或消息总线。

s120、以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象。

其中,对象集合为预先定义的一个集合,用于存储对象的引用关系,其可以是数组类型或列表类型等可以存储多个对象的数据类型。对象获取函数是对象集合的成员函数,其用于从对象集合中获取集合元素值。

示例性地,对象集合具有私有权限修饰符,对象集合为预先定义的键值对类型的集合,且对象集合的键的类型为视图加载协议类型。这里,视图加载协议是预先定义的,用于实现根据消息进行视图加载的协议,其内包含实现视图加载操作的视图加载协议函数。例如,协议以接口形式实现,那么视图加载协议的定义代码示例为publicinterfaceiinflate{publicvoidinflateview();},iinflate便为视图加载协议的名称,inflateview()便为视图加载协议函数。以map键值对为例,对象集合定义及初始化的示例代码为privatemap<string,iinflate>maplist=newhashmap<string,iinflate>(),maplist为对象集合的名称,其是一个全局的私有变量,这样就可以保证该对象集合maplist只能够被消息分发器访问,其他类无法对其进行访问。对象集合中的键信息是字符串string类型的,其可对应视图标识,对象集合中的值信息代表的是视图加载协议类型iinflate的对象数据。

示例性地,对象集合用于存储各视图标识及与每个视图标识对应的视图协议对象。其中,视图协议对象是一个视图加载协议类型的视图对象,其为初始视图类基于预先定义的视图加载协议而生成,其中包含视图加载协议函数。根据上述说明对象集合中的键信息可对应于视图标识,值信息可对应于视图协议对象,也就是说对象集合构建了视图信息与视图协议对象之间的映射关系,一个视图标识对应一个视图协议对象。

具体地,视图加载装置确定了目标视图标识之后,为了加载目标视图,便需要获取目标视图对应的视图协议对象(即目标视图协议对象),进而通过该目标视图协议对象来调用视图加载协议函数,以实现目标视图的加载。

由于视图协议对象均存储在消息分发器维护的对象集合中,故视图加载装置需要首先访问对象集合,其通过maplist==null的方式来判定对象集合maplist是否为空。如果为空,就结束本次基于消息的视图加载流程。如果不为空,那么便以目标视图标识(如a)为函数输入参数,通过对象集合调用对象获取函数,即maplist.get(a)。对象获取函数内部会根据目标视图标识a来查找相应键值对中的值并返回该值,即获得目标视图标识对应的视图协议对象miinflate,称为目标视图协议对象。

示例性地,在s120之前,还包括:在生成任一视图协议对象后,以视图协议对象的视图标识和视图协议对象为输入参数,通过消息分发对象调用对象注册函数,将视图协议对象的视图标识和视图协议对象存储至对象集合。

其中,消息分发对象是消息分发器对应的实例化对象,其用于处理消息的分发及本发明实施例中的视图加载。对象注册函数是预先在消息分发类中定义的函数,其用于将集合元素写入对象集合,也就是说将视图协议对象的引用关系注册至消息分发器,以便在执行视图加载操作时可以直接访问各个视图协议对象。该对象注册函数的示例代码为:publicvoidsetinflatelistener(stringviewname,iinflateinflatelistener),该函数的函数名称是setinflatelistener,其是一个公有public类型的函数,返回值是空void类型。其是对对象集合进行写入访问,故将其函数输入参数与对象集合中的键和值设置相同,第一个函数参数是string类型的形参viewname,第二个函数参数是视图加载协议iinflate类型的形参inflatelistener。

具体地,根据上述说明,对象集合中存储的是视图标识及其对应的视图协议对象,故在执行s120的集合元素获取之前,需要先执行集合元素的添加流程。具体实施时,在生成任何一个视图协议对象之后,便将该视图协议对象对应的视图标识和该视图协议对象为函数输入参数,调用消息分发对象中的对象注册函数setinflatelistener。对象注册函数setinflatelistener的内部实现为:首先可以判断输入参数,即视图协议对象及其视图标识,是否为正确的函数输入参数,例如可以判断视图协议对象及其视图标识是否为空。如果为空,则结束本次集合元素添加流程。如果不为空,则以视图协议对象及其视图标识为函数输入参数,调用对象集合maplist中的元素添加函数add(),将该视图协议对象的视图标识和该视图协议对象存储至对象集合。

示例性地,生成视图协议对象包括:初始视图类通过协议继承关键字继承视图加载协议,并复写视图加载协议中的协议函数,获得协议视图类及协议视图类中的视图加载协议函数;依据协议视图类生成视图协议对象,视图协议对象为视图加载协议类型的视图对象。

具体地,在执行对象集合的写入访问之前,需要先生成视图协议对象。由于视图协议对象是视图加载协议类型的视图对象,故需要将最初定义的视图类(即初始视图类)设置为继承视图加载协议。具体实施时,使得初始视图类通过协议继承关键字implements来继承视图加载协议,并复写及实现视图加载协议中的协议函数,即定义的视图加载协议函数,便可获得视图加载协议类型的视图类(即协议视图类)及其内的视图加载协议函数。之后,基于协议视图类实例化对象,生成视图协议对象。

s130、通过目标视图协议对象调用视图加载协议函数,以加载目标视图。

具体地,获取目标视图协议对象之后,为了提高逻辑严谨性,首先通过miinflate==null的方式判断该目标视图协议对象是否为空。若为空,则结束本次基于消息的视图加载流程。若不为空,则调用该目标视图协议对象中的视图加载协议函数,即miinflate.inflateview(),以触发并实现目标视图的加载操作。

示例性地,视图加载协议函数通过如下方式实现加载目标视图的功能:以系统布局服务关键字为输入参数,通过上下文对象调用系统对象获取函数,获得系统加载对象;以目标视图对应的布局文件标识为输入参数,通过系统加载对象调用视图布局函数,加载目标视图的布局文件,并生成视图类型的加载视图对象。

其中,系统布局服务关键字是指android系统提供的,用于实现视图布局的系统开发服务的名称或标识,例如可以是layout_inflater_service。系统加载对象是android系统提供的,用于实现视图加载的对象,其内包含实现视图布局及加载操作的函数,即视图布局函数。布局文件是记录各个视图及控件的布局参数等信息的文件。加载视图对象是指视图加载后生成的对象。

具体地,在视图加载协议函数的内部,通过如下流程实现视图加载:首先以系统布局服务关键字layout_inflater_service为函数输入参数,调用上下文对象context中的系统对象获取函数getsystemservice,即context.getsystemservice(context.layout_inflater_service),获得函数返回值,即系统中的布局加载类型layoutinflater的系统加载对象minflater。之后,以目标视图a对应的布局文件标识r.layout.view_a为函数输入参数,调用系统加载对象minflater中的视图布局函数inflate,来加载目标视图a的布局文件信息,并根据布局文件信息来布局目标视图,生成视图view类型的加载视图对象mview。在内存中视图类型的加载视图对象mview便代表的是需要加载的目标视图,至此便完成了整个目标视图a的加载。

本实施例的技术方案,通过在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识;以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象;通过目标视图协议对象调用视图加载协议函数,以加载目标视图。实现了在消息分发器中根据所接收到的功能启动消息确定需要加载的目标视图并执行目标视图的加载操作,解决了页面中所有视图必须在页面启动时全部加载造成的页面启动慢的问题,达到了根据消息来将页面中的各个视图分散式加载,从而提高页面启动速度及提升用户体验的技术效果。

在上述技术方案的基础上,在生成视图类型的加载视图对象之后,还包括:分别以目标视图中的各子视图对应的子视图标识为输入参数,通过加载视图对象调用子视图查找函数,获得各子视图对象及每个子视图对象对应的加载信息,以填充目标视图。

其中,子视图标识是指唯一表征子视图的标识,其为字符串类型,例如可以是字母、数字和符号等中的至少一种。子视图查找函数是android系统提供的子视图布局函数,其用于从布局文件中确定子视图的布局信息,并对其进行布局与内容填充。

具体地,上述所加载的目标视图为父视图,也称为视图容器,其用于容纳具体的显示控件,称为父视图的子视图。在目标视图加载后,便可以为其内包含的各个子视图填充内容,以便进行后续的显示操作。具体实施时,目标视图a中包含几个子视图便执行几次如下流程:以子视图标识为函数输入参数,调用加载视图对象mview中的子视图查找函数findviewbyid(),来获得该子视图对象及其布局信息和加载信息(如填充内容),来实现子视图的加载和内容填充。待所有子视图的加载操作执行完毕后,目标视图便也被填充完毕。这样设置的好处在于,可以在目标视图加载后直接执行相应的显示内容填充,能够进一步提高目标视图的显示速度,从而进一步提高页面启动速度。

以下是本发明实施例提供的基于消息的视图加载装置的实施例,该装置与上述各实施例的基于消息的视图加载方法属于同一个发明构思,在基于消息的视图加载装置的实施例中未详尽描述的细节内容,可以参考上述基于消息的视图加载方法的实施例。

实施例二

本实施例提供一种基于消息的视图加载装置,参见图2,该装置具体包括:

目标视图标识确定模块210,用于在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识;

目标视图协议对象获取模块220,用于以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象,其中,对象集合用于存储各视图标识及与每个视图标识对应的视图协议对象,视图协议对象为初始视图类基于预先定义的视图加载协议而生成;

目标视图加载模块230,用于通过目标视图协议对象调用视图加载协议函数,以加载目标视图,其中,视图加载协议函数为视图加载协议中包含的协议函数。

可选地,在上述装置的基础上,该装置还包括对象存储模块,用于:

在以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象之前,在生成任一视图协议对象后,以视图协议对象的视图标识和视图协议对象为输入参数,通过消息分发对象调用对象注册函数,将视图协议对象的视图标识和视图协议对象存储至对象集合。

进一步地,对象存储模块包括视图协议对象生成子模块,用于通过如下方式生成视图协议对象:

初始视图类通过协议继承关键字继承视图加载协议,并复写视图加载协议中的协议函数,获得协议视图类及协议视图类中的视图加载协议函数;

依据协议视图类生成视图协议对象,视图协议对象为视图加载协议类型的视图对象。

可选地,对象集合具有私有权限修饰符,对象集合为预先定义的键值对类型的集合,且对象集合的键的类型为视图加载协议类型。

可选地,目标视图加载模块230包括函数执行子模块,用于通过如下方式实现加载目标视图的功能:

以系统布局服务关键字为输入参数,通过上下文对象调用系统对象获取函数,获得系统加载对象;

以目标视图对应的布局文件标识为输入参数,通过系统加载对象调用视图布局函数,加载目标视图的布局文件,并生成视图类型的加载视图对象。

进一步地,函数执行子模块具体用于:

在生成视图类型的加载视图对象之后,分别以目标视图中的各子视图对应的子视图标识为输入参数,通过加载视图对象调用子视图查找函数,获得各子视图对象及每个子视图对象对应的加载信息,以填充目标视图。

通过本发明实施例二的一种基于消息的视图加载装置,实现了页面中各个视图的分散式加载,提高了页面启动速度。

本发明实施例所提供的基于消息的视图加载装置可执行本发明任意实施例所提供的基于消息的视图加载方法,具备执行方法相应的功能模块和有益效果。

值得注意的是,上述基于消息的视图加载装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例三

参见图3,本实施例提供了一种设备300,其包括:一个或多个处理器320;存储装置310,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器320执行,使得一个或多个处理器320实现本发明实施例所提供的基于消息的视图加载方法,包括:

在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识;

以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象,其中,对象集合用于存储各视图标识及与每个视图标识对应的视图协议对象,视图协议对象为初始视图类基于预先定义的视图加载协议而生成;

通过目标视图协议对象调用视图加载协议函数,以加载目标视图,其中,视图加载协议函数为视图加载协议中包含的协议函数。

当然,本领域技术人员可以理解,处理器320还可以实现本发明任意实施例所提供的基于消息的视图加载方法的技术方案。

图3显示的设备300仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图3所示,该设备300包括处理器320、存储装置310、输入装置330和输出装置340;设备中处理器320的数量可以是一个或多个,图3中以一个处理器320为例;设备中的处理器320、存储装置310、输入装置330和输出装置340可以通过总线或其他方式连接,图3中以通过总线350连接为例。

存储装置310作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于消息的视图加载方法对应的程序指令/模块(例如,基于消息的视图加载装置中的目标视图标识确定模块、目标视图协议对象获取模块和目标视图加载模块)。

存储装置310可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置310可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置310可进一步包括相对于处理器320远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置330可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置340可包括显示屏等显示设备。

实施例四

本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种基于消息的视图加载方法,该方法包括:

在接收到触发视图加载的功能启动消息时,依据功能启动消息确定目标视图的目标视图标识;

以目标视图标识为输入参数,通过对象集合调用对象获取函数,获得目标视图标识对应的目标视图协议对象,其中,对象集合用于存储各视图标识及与每个视图标识对应的视图协议对象,视图协议对象为初始视图类基于预先定义的视图加载协议而生成;

通过目标视图协议对象调用视图加载协议函数,以加载目标视图,其中,视图加载协议函数为视图加载协议中包含的协议函数。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上的方法操作,还可以执行本发明任意实施例所提供的基于消息的视图加载方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台搭载android系统的设备(可以是手机、掌上电脑或智能电视等)执行本发明各个实施例所提供的基于消息的视图加载方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1