具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,当客户端需要从服务器中加载数据时,为了减少加载数据过程中消耗的时间,相关技术中,主要通过以下三种方式来实现预加载数据,分别为:
方式1,依据经验设置预加载规则,具体为:客户端通过预设的代码,在某些时机,比如,客户端启动后,提前加载数据。然而,如果预加载的数据量较少,可能会覆盖不到用户执行的全部操作,依然会出现白屏的问题;如果预加载的数据量较大,用户执行的操作可能仅会使用到其中的少量数据,预加载的数据利用率较低,会浪费较多的资源。
方式2,根据用户习惯设置统一的预加载规则,具体为:收集所有用户的使用习惯,生成一套统一的预加载规则,设置所有用户的应用程序都预加载所有的业务数据。由于用户的行为不一,不同的用户对需要加载的数据需求不同,因此采用该种预加载规则,则会存在不匹配具体的用户,并且浪费设备资源的问题。
方式3,根据每个用户习惯,设置每个用户的预加载规则,具体为:收集每个用户的使用习惯,客户端上报用户行为数据,由服务器计算可以得到单一具体用户的使用习惯,然后再下发预加载规则来预加载数据,该方式虽然实现了可以匹配具体用户,但是需要消耗采集信息的流量、服务器计算资源,并且可能会涉及隐私问题。
基于上述,本发明实施例提供的一种预加载数据的方法、装置以及系统,该技术可以应用于各类客户端预加载数据的场景,例如,玩家通过游戏客户端进入游戏场景页面、用户打开应用程序进入目标页面等。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种预加载数据的方法进行详细介绍,如图1所示,该预加载数据的方法可以通过终端设备实现,该终端设备可以为本地终端设备,也可以为客户端设备,本方法包括如下步骤:
步骤S102,响应于页面访问操作,确定该页面访问操作对应的第一页面;
上述页面访问操作,根据客户端种类的不同,可以有多种实现方式,例如,针对Web客户端,用户可以通过输入地址来执行页面访问操作,对于移动客户端,用户可以通过点击应用程序图标打开应用程序,之后在应用程序中,可以通过点击、滑动等方式执行页面访问操作,对于游戏客户端,用户可以通过点击指示标识或者控件来执行页面访问操作等等。
以游戏客户端为例,当用户打开游戏客户端进入游戏界面时,此时对应的为主页面,也可以称为父页面,在父页面中可以显示有多个控件或者指示标识,该多个控件或者指示标识可以用于指示用户进入不同的页面以启动不同的游戏场景,或者完成不同的游戏任务。不同的控件或者指示标识对应不同的页面,当用户执行页面访问操作后,确定该访问页面操作对应的第一页面,例如,用户点击父页面中的控件A,则会从父页面进入一个新的页面,即第一页面,也就是第一页面与控件A相对应,再如,如果用户点击的是父页面中的控件B,则会从父页面进入另一个新的页面,也就是第二页面,该第二页面与控件B相对应。
需要说明的是,上述第一页面和第二页面是通过在父页面中执行页面访问操作进入的,该第一页面和第二页面均为父页面的子页面,此外,第一页面和第二页面中也可以设置有多个控件或者指示标识,该多个控件或者指示标识也会有对应的页面。
步骤S104,基于预设的页面之间的层级关系,确定第一页面的子页面;
为了给用户提供更好的使用体验或者更好的服务,在每个应用程序中的父页面中设置有多个控件,供用户根据自己的需求或者爱好习惯等来选择控件,执行页面访问操作,从而进入控件对应的页面,该页面即为父页面的子页面,在该页面中还可以设置有多个控件供用户选择以进入该页面的子页面,以此类推,直至某一子页面中没有控件供用户选择,用户进入该子页面后,只能返回该子页面的父页面。
需要说明的是,页面之间的层级关系通过父页面和子页面进行表征;例如,页面A包括的子页面为页面B和页面C,页面B包括的子页面为页面D和页面E;其中,页面A为页面B和页面C的父页面,页面B为页面D和页面B的父页面。
上述的每一个页面都是由一个视图控制器来管理的,其中,视图控制器UIViewController是所有视图控制器的父类,平行结构控制器UITabBarController和堆栈式控制器UINavigationController都是UIViewController的子类。对于以UITabBarController类为根页面控制器的应用程序,用户使用一段时间后,客户端本地可以记录用户的页面访问记录。
基于上述,本实施例中预先设置有页面之间的层级关系,在确定页面访问操作对应的第一页面之后,基于预设的页面之间的层级关系,可以确定上述第一页面的子页面。其中,第一页面的子页面,可以有一个,也可以有多个。
步骤S106,获取预先记录的子页面的历史访问频率;其中,该历史访问频率包括:通过第一页面进行触发访问子页面的频率;
进一步的,获取预先记录的子页面的历史访问频率,访问子页面可以有两种形式,一种形式为从该子页面的父页面,即上述第一页面,前进进入子页面,另一种形式为从该子页面的子页面后退(返回)进入到该子页面。两者的区别在于,前者需要预加载数据来减少用户进入该子页面的时间,而后者则不需要预加载数据。上述获取的历史访问频率包括通过第一页面进行触发访问子页面的频率。该历史访问频率可以从上述页面访问记录中获取,页面访问记录中页面控制器类名后面的数字,代表前进进入该页面的次数,也就是,从该页面的父页面进入该页面的次数。上述页面访问记录是基于客户端代码形成的,具体的,客户端代码可以为实现统计浏览记录、告知业务频率的代码模块,用户通过执行不同的页面访问操作,进入不同的页面来完成不同的业务活动,不同的业务对应有不同的数据。
基于上述,本实施例中通过获取第一页面的子页面的历史访问频率,可以更好地了解用户的访问习惯,为确定目标子页面和预加载数据做好准备。
步骤S108,基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。
实际实现时,上述客户端代码可以将统计的浏览记录和业务频率信息提供给发开人员,客户端在开发时,会预埋下可预加载的业务代码,并且定义好算法。例如,A、B是C的子页面,分别对应有预加载逻辑a、b两段代码块,当用户进入C页面后,客户端代码会提供A、B两个子页面的历史访问频率,此时,预先定义的算法会决定将哪个页面作为目标子页面。
例如,预定义算法可以根据历史访问频率的高低来决定目标子页面,将历史访问频率高的子页面作为目标子页面。再如,预定义算法还可以结合时间段和历史访问频率来确定目标子页面,比如,从历史访问记录中发现用户在每天上午八点钟左右都会访问A子页面,而其他时间大多数会访问B子页面,此时A子页面的历史访问频率会低于B子页面的历史访问频率,那么当用户下一次进入C页面时,自定义算法可以结合时间来确定目标子页面,如果用户在上午八点左右进入C页面,则将A子页面确定为目标子页面,如果是其他时间段进入C页面,则将B子页面确定为目标子页面。确定目标子页面之后,执行预加载目标子页面的页面数据,并显示第一页面。
基于上述,本实例中通过客户端代码统计浏览记录、告知业务频率,在客户端开发时,预埋下可预加载的数据代码并定义好算法。当用户进入第一页面后,由客户端代码提供第一页面的子页面的历史访问频率,由预先定义的算法确定目标子页面,执行预加载目标子页面的页面数据,并显示第一页面,提高了预加载数据与用户使用习惯的匹配度。
上述预加载数据的方法,响应于页面访问操作,确定该页面访问操作对应的第一页面;基于预设的页面之间的层级关系,确定第一页面的子页面;获取预先记录的子页面的历史访问频率;其中,该历史访问频率包括:通过第一页面进行触发访问子页面的频率;基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。该方式中,当访问到第一页面时,根据该页面的每个子页面历史访问频率,确定需要预加载的子页面;该方式可以使预加载的数据与用户的访问习惯相匹配,既避免了预加载数据较少,覆盖不全用户执行的操作,又避免了预加载数据量较大,浪费较多资源的情况,提高了预加载数据的有效利用率和精准度。
下述实施例提供一种获取子页面的历史访问频率的具体实施方式。
获取第一页面所属的目标应用的页面访问记录;其中,该页面访问记录中包括至少一个节点;每个节点对应目标应用中的一个页面;上述至少一个节点基于层级关系建立;节点中包括:节点的对应页面的控制器类名,以及对应页面的历史访问频率;从页面访问记录中获取子页面的历史访问频率。
实际实现时,客户端有多个不同的应用,用来为用户提供不同的业务服务,当用户执行页面访问操作,确定第一页面后,获取第一页面所属的目标应用的页面访问记录,浏览树可以作为页面访问记录的一种表现形式,该页面访问记录中记录了用户打开目标应用后进入的页面,页面访问记录中包括至少一个节点,其中,每个节点对应目标应用中的一个页面,基于此,页面访问记录中的节点可以基于页面层级关系建立。节点中包含有节点对应页面的控制器类名以及对应页面的历史访问频率。
下述表1所示的浏览树是一个示例。
表1
上述浏览树可以反映页面之间的层级关系,其中,每个控制器相当于一个页面,用控制器的类名作为记录,类名后面的数字,代表前进进入到该页面的次数。举例来说,[UITabBarController|2]对应的页面即为父页面,[FViewController|3]对应的页面是在上述父页面中点击其中的一个控件后,显示的页面,即为父页面的子页面。
需要说明的是,对于平行结构的页面属于同一层级,上述浏览树中的平行结构的页面对应UITabBarController的四个子页面控制器,分别为:FViewController、ViewController、UINavigationController_CviewController和UINavigationController_AViewController。而对于堆栈式结构页面,则会按照页面进入顺序不断形成子页面,比如浏览树中CViewController对应的页面为UINavigationController_CviewController对应的页面的子页面,而DViewController又为CViewController的子页面。
举例来说,上述浏览树对应的页面访问记录中,每一行即为一个节点,其中,第一行root为根节点,根节点没有对应的页面,第二行[UITabBarController|2]为子节点,其中,UITabBarController为与该子节点对应的目标应用的父页面的控制器类名,2为与该子节点对应的目标应用的父页面的历史访问频率。
本步骤从页面访问记录中获取子页面的历史访问频率,可以更好的了解用户的页面访问习惯。
下述实施例提供一种确定页面访问操作对应的第一页面的具体实施方式。
响应针对第一页面所属的目标应用的启动操作,获取目标应用的页面访问记录;如果获取不到页面访问记录,建立目标应用的页面访问记录;其中,页面访问记录中包括目标应用的根节点;在页面访问记录中设置游标;其中,游标指向当前正在访问的页面对应的节点;在初始状态下,游标指向根节点。
具体的,当监测到用户启动第一页面所属的目标应用后,则获取目标应用的页面访问记录,如果目标应用是被用户首次打开,此时便会获取不到页面访问记录,针对获取不到页面访问记录的情形,建立目标应用的页面访问记录,该页面访问记录中包括目标应用的根节点,该根节点不对应页面。另外,在页面访问记录中设置游标,当用户访问目标应用中的页面时,游标指向当前正在访问的页面对应的节点。在没有页面访问记录,目标应用的初始状态下,游标则指向根节点。
通过在页面访问记录中设置游标,在用户进行页面切换时,控制游标移动,指向当前正在访问的页面对应的节点,从而,可以更好地了解用户进入页面的方式是前进进入到目标页面,还是从目标页面的子页面中返回进入目标页面,还可以确定页面访问记录中页面之间的层级关系。
下述实施例提供一种建立第一页面对应的节点的具体实施方式。
确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中不包含第一页面对应的节点,基于第一页面与页面访问记录中已有节点对应的页面之间的层级关系,在页面访问记录中建立第一页面对应的节点;在第一页面对应的节点中,记录第一页面的控制器类名,并更新第一页面的历史访问频率。
实际实现时,获取第一页面所属的目标应用的页面访问记录之后,从该页面访问记录中查找是否包含有第一页面对应的节点。如果页面访问记录中不包含第一页面对应的节点,则在页面访问记录中建立该第一页面对应的节点,具体可以根据第一页面与页面访问记录中已有节点对应的页面之间的层级关系来建立,例如,目标应用的页面访问记录中有A、B、C三个页面,不包含第一页面,分别对应a、b和c节点,其中,A、B是C的子页面,相对应的a、b即为c节点下面的子节点。如果第一页面也是C页面的子页面,则该第一页面对应的节点建立在c节点下面与的a、b节点并列的位置,也是c节点的子节点;如果第一页面与C页面为同一层级的页面,则第一页面对应的节点建立在与c节点并列的位置。
进一步的,在第一页面对应的节点中,添加并记录第一页面的控制器类名,更新第一页面的历史访问频率,当用户从第一页面的父页面中进入第一页面时,则增加第一页面的历史访问次数,更新第一页面的历史访问频率。
下述实施例提供一种更新第一页面的历史访问频率的具体实施方式。
上述页面访问操作通过第一页面的父页面触发;确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中包含第一页面对应的节点,更新第一页面的历史访问频率。
如果页面访问操作是通过第一页面的父页面触发,也就是该第一页面是通过点击第一页面的父页面中的某一控件而进入的,那么获取第一页面所属的目标应用的页面访问记录之后,从该页面访问记录中查找是否包含有第一页面对应的节点,如果页面访问记录中包含第一页面对应的节点,则无需建立第一页面对应的节点,只需要更新第一页面的历史访问频率即可。
下述实施例提供一种执行从页面访问记录中获取子页面的历史访问频率的具体实施方式。
页面访问记录中设置有游标;确定游标是否从指定节点移动至第一页面对应的节点;其中,指定节点包括:第一页面的父页面对应的节点,如果游标从指定节点移动至第一页面对应的节点,执行从页面访问记录中获取子页面的历史访问频率的步骤。
实际实现时,页面访问记录中设置有游标,游标用来指向当前正在访问的页面对应的节点,在获取页面访问频率时,需要考量游标是否是从指定节点移动到第一页面对应的节点,该指定节点包括第一页面的父页面对应的节点,以保证从页面访问记录中获取的是前进进入第一页面以及第一页面的子页面的历史访问频率。如果游标是从指定节点移动至第一页面对应的节点的,进一步执行从页面访问记录中获取子页面的历史访问频率的步骤,如果游标不是从指定节点移动至第一页面对应的节点,表明用户不是前进进入用户的,无需预加载数据,因此,便不需要获取子页面的历史访问频率。
下述实施例提供一种控制游标移动至第一页面对应的节点的具体实施方式。
基于第一页面的控制器类名,以及第一页面的父页面的控制器类名,控制游标移动至第一页面对应的节点。
在实际实现时,页面对应的控制器主要有两种,一种为平行结构控制器,另一种为堆栈式控制器。其中,平行结构控制器的下一级控制器是其子控制器,可以有多个子控制器,并且,多个子控制器的顺序是从第一个子控制器依次排放展示。堆栈式控制器是以栈的形式管理视图控制器,每一个视图控制器有其对应的页面,根据进入堆栈式控制器中的顺序不断将视图控制器分级,在图形用户界面中只展示最后进入的视图控制器对应的页面内容。而上述游标指向的即是图形用户界面中显示的当前正在访问的页面(即图形用户界面中正在显示的页面)对应的节点。
基于此,可以根据第一页面的控制器类名和第一页面的父页面的控制器类名来控制游标移动至第一页面对应的节点。
下述实施例继续说明控制游标移动至第一页面对应的节点的具体实施方式。
判断第一页面的父页面的控制器类名是否是平行结构控制器;如果第一页面的父页面的控制器类名是平行结构控制器,判断第一页面的控制器类名是否是堆栈式控制器,得到第一判断结果,基于该第一判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器,得到第二判断结果,基于该第二判断结果,控制游标移动至第一页面对应的节点。
具体的,判断第一页面的父页面的控制器类名是否为平行结构控制器,一种方式中,如果是平行结构控制器,进一步再判断第一页面的控制器的类名是否为堆栈式控制器,得到第一判断结果,该第一判断结果分别为:第一页面的父页面的控制器类名是平行结构控制器,第一页面的控制器类名是堆栈式控制器;以及第一页面的父页面的控制器类名为平行结构控制器,第一页面的控制器类名不是堆栈式控制器。根据上述第一判断结果的两种不同情形,对应地控制游标移动至第一页面对应的节点。
另一种方式中,如果第一页面的父页面的控制器类名不是平行结构控制器,进一步判断第一页面控制器类名是否为平行结构控制器,得到第二判断结果,该第二判断结果分别为:第一页面的父页面的控制器类名不是平行结构控制器,第一页面控制器类名是平行结构控制器;以及第一页面的父页面的控制器类名不是平行结构控制器,第一页面控制器类名不是平行结构控制器。根据上述第二判断结果的两种不同情形,对应地控制游标移动至第一页面对应的节点。
下述实施例提供一种基于第一判断结果,控制游标移动至第一页面对应的节点的具体实施方式。
如果第一页面的父页面的控制器类名是平行结构控制器,控制游标移动至第一页面的父页面对应的节点;判断第一页面的控制器类名是否是堆栈式控制器,得到第三判断结果,基于该第三判断结果,控制游标移动至第一页面对应的节点。
具体的,如果第一页面的父页面的控制器类名是平行结构控制器,那么,第一页面以及和第一页面同级的子页面可以在父页面中依次排列展示,此时,控制游标移动至第一页面的父页面对应的节点,然后再判断第一页面的控制器类名是否是堆栈式控制器,得到第三判断结果,该第三判断结果为:第一页面的控制器类名是堆栈式控制器和第一页面的控制器类名不是堆栈式控制器。根据上述第三判断结果,控制游标移动至第一页面对应的节点。
下述实施例提供一种基于第三判断结果,控制游标移动至第一页面对应的节点的具体实施方式。
判断第一页面的控制器类名是否是堆栈式控制器;如果第一页面的控制器类名是堆栈式控制器,控制游标移动至第一页面中的第一子页面对应的节点;如果第一页面的控制器类名不是堆栈式控制器,控制游标移动至第一页面对应的节点。
实际实现时,判断第一页面的控制器类名是否是堆栈式控制器,如果是,则表明在图形用户界面中只能显示最后进入堆栈式控制器的视图控制器对应的页面,针对第一页面的控制器类名是堆栈式控制器,第一页面的父页面是平行结构控制器这一情形,在平行结构控制器对应的页面中进行页面切换时,会先进入到堆栈式控制器中,然后再进入堆栈式控制器的第一子页面,当堆栈式控制器第一次出现时,该堆栈式控制器的第一子页面也会伴随出现。因此,控制游标移动至第一页面中的第一子页面对应的节点的具体过程为,先控制游标从第一页面的父页面对应的节点移动至第一页面对应的节点,再从第一页面对应的节点移动至第一页面中的第一子页面对应的节点。
如果第一页面的控制器类名不是堆栈式控制器,则表明在图形用户界面中,可以依次排列各子视图控制器对应的页面,此时,控制游标从第一页面的父页面对应的节点移动至第一页面对应的节点。
下述实施例提供一种基于第二判断结果,控制游标移动至第一页面对应的节点的具体实施方式。
如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器;如果第一页面的控制器类名是平行结构控制器,控制游标移动至第一页面对应的节点;如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器,得到第四判断结果,基于该第四判断结果,控制游标移动至第一页面对应的节点。
实际实现时,如果第一页面的父页面的控制器类名不是平行结构控制器,那么第一页面以及与第一页面同级的子页面不能在父页面中依次排列展示,还需要进一步判断第一页面的控制器类名是否是平行结构控制器。如果第一页面的控制器类名是平行结构控制器,则控制游标从第一页面的父页面对应的节点移动至第一页面对应的节点;如果第一页面的控制器类名不是平行结构控制器,则需要判断第一页面的父页面的控制器类名是否是堆栈式控制器,得到第四判断结果,该第四判断结果分别为:第一页面的控制器类名不是平行结构控制器,第一页面的父页面的控制器类名是堆栈式控制器;以及第一页面的控制器类名不是平行结构控制器,第一页面的父页面的控制器类名不是堆栈式控制器。根据上述第四判断结果,控制游标移动至第一页面对应的节点。
下述实施例提供一种基于第四判断结果,控制游标移动至第一页面对应的节点的具体实施方式。
如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器;如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器,得到第五判断结果,基于该第五判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是堆栈式控制器,判断第一页面是否存在已弹出页面的视图控制器,如果存在,控制游标移动至第一页面对应的节点。
具体的,如果第一页面的控制器类名不是平行结构控制器,需要进一步判断判断第一页面的父页面的控制器类名是否是堆栈式控制器;一种情形为第一页面的父页面的控制器类名是堆栈式控制器,此时,还需要进一步判断第一页面是否正在调用第一页面的父页面的控制器,进而得到第五判断结果,根据该第五判断结果,控制游标移动至第一页面对应的节点;另一种情形为第一页面的父页面的控制器类名不是堆栈式控制器,此时需要判断第一页面是否存在已弹出页面的视图控制器,该已弹出页面的视图控制器是由UIViewController管理的视图控制器,用来弹出一个临时页面,如果第一页面存在已弹出页面的视图控制器,则控制游标从第一页面的父页面对应的节点前进移动至第一页面对应的节点;如果第一页面不存在已弹出页面的视图控制器,直接结束控制游标移动的逻辑判断。
下述实施例提供一种基于第五判断结果,控制游标移动至第一页面对应的节点的具体实施方式。
如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器;如果第一页面正在调用第一页面的父页面的控制器,控制游标移动至第一页面对应的节点;如果第一页面没有正在调用第一页面的父页面的控制器,控制游标返回至第一页面对应的节点。
具体的,如果第一页面的父页面的控制器类名是堆栈式控制器,进一步判断第一页面是否正在调用第一页面的父页面的控制器。如果第一页面正在调用第一页面的父页面的控制器,则表明页面切换情况为从第一页面的父页面前进进入到第一页面,此时,控制游标从第一页面的父页面对应的节点前进移动至第一页面对应的节点,如果第一页面没有正在调用第一页面的父页面的控制器,此时,控制游标从第一页面的子页面返回至第一页面对应的节点。
为了便于理解,可参阅图2,为本发明提供的另一种预加载数据的方法流程图。
步骤S202:视图即将显示:在视图出现在图形用户界面之前调用视图显示函数,用来更新显示视图的信息,此时,视图还没有显示在图形用户界面中,需要先将视图即将显示函数替换为自定义函数,由自定义函数执行下述逻辑判断,然后再调用视图即将显示函数;
步骤S204:判断当前视图控制器self(对应第一页面)的父视图控制器parent(对应第一页面的父页面)是否为平行结构控制器;如果是,则执行步骤S224;如果不是,则执行步骤S206;
步骤S206:判断当前视图控制器self是否为平行结构控制器;如果是,则执行步骤S228,如果不是,则执行步骤S208;
步骤S208:判断父视图控制器parent是否为堆栈式控制器;如果是,执行步骤S220;如果不是,则执行步骤S210;
步骤S210:判断当前视图控制器self是否存在已弹出的页面视图控制器,如果存在,则执行步骤S212;如果不存在,则执行步骤S218;
步骤S212:游标前进到Name(self),即当前视图控制器的节点;进一步执行步骤S214;
步骤S214:判断上述当前视图控制器self是否为前进;如果是,执行步骤S216;如果不是,则执行步骤S218;
步骤S216:给出当前节点的所有已记录子节点访问频率;另外,还会更新子节点的访问频率;
步骤S218:结束;
步骤S220:判断当前视图控制器self是否正在调用当前视图控制器的父视图控制器;如果是,执行步骤S228,如果不是,执行步骤S222;
步骤S222:游标返回到Name(self),即当前视图控制器的节点;进一步执行步骤S214;
步骤S224:游标返回到当前视图控制器的父视图控制器的节点;进一步执行步骤S226:
步骤S226:判断当前视图控制器是否为堆栈式控制器;如果是,执行步骤S230,;如果不是,执行步骤S228:
步骤S228:游标前进到Name(self),即当前视图控制器的节点;进一步执行步骤S214;
步骤S230:游标前进到第一子视图控制器对应的当前视图控制器的节点;进一步执行步骤S232:
步骤S232:游标前进到当前视图控制器的第一子视图控制器的节点;进一步执行步骤S214。
本实施例中,体现了游标的移动逻辑、游标的走向以及页面之间的层级关系,可以根据该流程图生成页面访问记录中的节点。通过执行上述步骤,能够保证用户在进行页面切换时,页面访问记录能够准确记录进入页面的方式,适时更新页面的历史访问频率。从而提高预加载数据与用户使用习惯的匹配度。
下述实施例提供一种取消显示第一页面的控制器中的页面内容的具体实施方式。
响应针对第一页面的关闭操作,判断第一页面是否存在已弹出页面的视图控制器;如果第一页面存在已弹出页面的视图控制器,控制游标移动至第一页面的父页面对应的节点;执行第一页面的视图消失函数,以将第一页面的视图控制器中的页面内容取消显示。
当监测到用户执行第一页面的关闭操作时,判断第一页面是否存在已弹出页面的视图控制器,该已弹出页面的视图控制器用来控制页面返回该页面的父页面。如果第一页面存在已弹出页面的视图控制器,则控制游标返回移动至第一页面的父页面对应的节点,并且游标指向第一页面的父页面对应的节点,再通过执行第一页面的视图消失函数,将第一页面的视图控制器中的页面内容取消显示。
以图3作为一个示例:
步骤S302:视图即将取消显示;通过调用并执行试图即将消失函数取消显示视图控制器中的页面内容。在调用视图即将取消显示函数之前,先将视图即将取消显示函数替换为自定义函数,由自定义函数执行页面切换的判断逻辑,决定游标的指向,然后再调用视图即将取消显示函数;
步骤S304:判断当前视图控制器self是否存在已弹出页面的视图控制器;其中,当前视图控制器self对应上述第一页面,当第一页面存在已弹出页面的视图控制器,则执行步骤S306,如果不存在,执行步骤S308;
步骤S306:后退一个节点;也就是,当第一页面存在已弹出页面的视图控制器时,游标会后退一个节点,即,返回到第一页面的上一级页面(父页面),游标移动至第一页面的父页面对应的节点,此时图形用户界面显示的即为第一页面的父页面,第一页面则会取消显示。当执行完上述页面切换逻辑判断后,再将自定义函数替换为视图即将取消显示函数,由视图即将取消显示函数控制游标后退一个节点。
步骤S308:结束。
由于在实际实现时,关闭第一页面时,第一页面的父页面不一定会调用试图即将显示函数,因此不能保证关闭第一页面后,会进入第一页面的父页面。而本实施例中,通过上述步骤,可以在视图即将显示函数监控不到的场景,准确地控制游标后退到正确的位置。
下述实施例提供一种显示第一页面的视图控制器中的页面内容的具体实施方式。
执行第一页面的视图显示函数,以将第一页面的视图控制器中的页面内容显示在图形用户界面中。
实际实现时,自定义函数执行完上述逻辑判断步骤之后,调用并执行第一页面的试图显示函数,即可将第一页面的视图控制器中的页面内容显示在图形用户页面中。
上述预加载数据的方法,有效地提升了专门访问特定模块内容的等待时长,同时只使用其他模块的用户则不会受到影响,避免过度预加载不需要内容导致的内存增加及CPU消耗。例如,对于某产品中部分每日使用游戏福利领取功能的用户群体,App会提早初始化WKWebView对象,用户进入领取福利的页面时就直接可用该WKWebView了。极大地减少网页白屏时长,降低到网络环境好的情况下降低到几乎不可察觉的程度。同时对于同一产品但是只使用游戏互通聊天、聊天室功能的用户,基本不会预先初始化WKWebView对象,避免了CPU和内存资源的冗余消耗。
对于上述方法实施例,参见图4所示的一种预加载数据的装置的结构示意图,该装置包括:
第一确定模块40,用于响应于页面访问操作,确定页面访问操作对应的第一页面;
第二确定模块42,用于基于预设的页面之间的层级关系,确定第一页面的子页面;
获取模块44,用于获取预先记录的子页面的历史访问频率;其中,历史访问频率包括:通过第一页面进行触发访问所述子页面的频率;
显示模块46,用于基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。
上述预加载数据的装置,响应于页面访问操作,确定该页面访问操作对应的第一页面;基于预设的页面之间的层级关系,确定第一页面的子页面;获取预先记录的子页面的历史访问频率;其中,该历史访问频率包括:通过第一页面进行触发访问子页面的频率;基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。该方式中,当访问到第一页面时,根据该页面的每个子页面历史访问频率,确定需要预加载的子页面;该方式可以使预加载的数据与用户的访问习惯相匹配,既避免了预加载数据较少,覆盖不全用户执行的操作,又避免了预加载数据量较大,浪费较多资源的情况,提高了预加载数据的有效利用率和精准度。
上述获取模块,还用于:获取第一页面所属的目标应用的页面访问记录;其中,该页面访问记录中包括至少一个节点;每个节点对应目标应用中的一个页面;上述至少一个节点基于层级关系建立;节点中包括:节点的对应页面的控制器类名,以及对应页面的历史访问频率;从页面访问记录中获取子页面的历史访问频率。
上述装置还包括:建立模块,用于:响应针对第一页面所属的目标应用的启动操作,获取目标应用的页面访问记录;如果获取不到页面访问记录,建立目标应用的页面访问记录;其中,页面访问记录中包括目标应用的根节点;在页面访问记录中设置游标;其中,游标指向当前正在访问的页面对应的节点;在初始状态下,游标指向根节点。
上述装置还包括:记录模块,用于:确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中不包含第一页面对应的节点,基于第一页面与页面访问记录中已有节点对应的页面之间的层级关系,在页面访问记录中建立第一页面对应的节点;在第一页面对应的节点中,记录第一页面的控制器类名,并更新第一页面的历史访问频率。
上述页面访问操作通过第一页面的父页面触发;上述装置还包括:更新模块,用于:确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中包含第一页面对应的节点,更新第一页面的历史访问频率
上述页面访问记录中设置有游标;上述装置还包括:指定移动模块,用于:确定游标是否从指定节点移动至第一页面对应的节点;其中,指定节点包括:第一页面的父页面对应的节点,如果游标从指定节点移动至第一页面对应的节点,执行从页面访问记录中获取子页面的历史访问频率的步骤。
上述装置还包括:控制移动模块,用于:基于第一页面的控制器类名,以及第一页面的父页面的控制器类名,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:判断第一页面的父页面的控制器类名是否是平行结构控制器;如果第一页面的父页面的控制器类名是平行结构控制器,判断第一页面的控制器类名是否是堆栈式控制器,得到第一判断结果,基于该第一判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器,得到第二判断结果,基于该第二判断结果,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:如果第一页面的父页面的控制器类名是平行结构控制器,控制游标移动至第一页面的父页面对应的节点;判断第一页面的控制器类名是否是堆栈式控制器,得到第三判断结果,基于该第三判断结果,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:判断第一页面的控制器类名是否是堆栈式控制器;如果第一页面的控制器类名是堆栈式控制器,控制游标移动至第一页面中的第一子页面对应的节点;如果第一页面的控制器类名不是堆栈式控制器,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器;如果第一页面的控制器类名是平行结构控制器,控制游标移动至第一页面对应的节点;如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器,得到第四判断结果,基于该第四判断结果,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器;如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器,得到第五判断结果,基于该第五判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是堆栈式控制器,判断第一页面是否存在已弹出页面的视图控制器,如果存在,控制游标移动至第一页面对应的节点。
上述控制移动模块,还用于:如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器;如果第一页面正在调用第一页面的父页面的控制器,控制游标移动至第一页面对应的节点;如果第一页面没有正在调用第一页面的父页面的控制器,控制游标返回至第一页面对应的节点。
上述指定移动模块,还用于:响应针对第一页面的关闭操作,判断第一页面是否存在已弹出页面的视图控制器;如果第一页面存在已弹出页面的视图控制器,控制游标移动至第一页面的父页面对应的节点;执行第一页面的视图消失函数,以将第一页面的视图控制器中的页面内容取消显示。
上述显示模块,还用于:执行第一页面的视图显示函数,以将第一页面的视图控制器中的页面内容显示在图形用户界面中。
本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述预加载数据的方法。该电子设备可以是服务器,也可以是触控终端设备。
参见图5所示,该电子设备包括处理器100和存储器101,该存储器101存储有能够被处理器100执行的机器可执行指令,该处理器100执行机器可执行指令以实现上述预加载数据的方法。
进一步地,图5所示的电子设备还包括总线102和通信接口103,处理器100、通信接口103和存储器101通过总线102连接。
其中,存储器101可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器100可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器101,处理器100读取存储器101中的信息,结合其硬件完成前述实施例的方法的步骤。
上述电子设备中的处理器,通过执行机器可执行指令,可以实现上述预加载数据的方法中的下述操作:
响应于页面访问操作,确定该页面访问操作对应的第一页面;基于预设的页面之间的层级关系,确定第一页面的子页面;获取预先记录的子页面的历史访问频率;基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。
该方式中,当访问到第一页面时,根据该页面的每个子页面历史访问频率,确定需要预加载的子页面;该方式可以使预加载的数据与用户的访问习惯相匹配,既避免了预加载数据较少,覆盖不全用户执行的操作,又避免了预加载数据量较大,浪费较多资源的情况,提高了预加载数据的有效利用率和精准度。
获取第一页面所属的目标应用的页面访问记录;其中,该页面访问记录中包括至少一个节点;每个节点对应目标应用中的一个页面;上述至少一个节点基于层级关系建立;节点中包括:节点的对应页面的控制器类名,以及对应页面的历史访问频率;从页面访问记录中获取子页面的历史访问频率。
本步骤从页面访问记录中获取子页面的历史访问频率,可以更好的了解用户的页面访问习惯。
响应针对第一页面所属的目标应用的启动操作,获取目标应用的页面访问记录;如果获取不到页面访问记录,建立目标应用的页面访问记录;其中,页面访问记录中包括目标应用的根节点;在页面访问记录中设置游标;其中,游标指向当前正在访问的页面对应的节点;在初始状态下,游标指向根节点。
通过在页面访问记录中设置游标,在用户进行页面切换时,控制游标移动,指向当前正在访问的页面对应的节点,从而,可以更好地了解用户进入页面的方式是前进进入到目标页面,还是从目标页面的子页面中返回进入目标页面,还可以确定页面访问记录中页面之间的层级关系。
确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中不包含第一页面对应的节点,基于第一页面与页面访问记录中已有节点对应的页面之间的层级关系,在页面访问记录中建立第一页面对应的节点;在第一页面对应的节点中,记录第一页面的控制器类名,并更新第一页面的历史访问频率。
页面访问操作通过第一页面的父页面触发;确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中包含第一页面对应的节点,更新第一页面的历史访问频率。
上述页面访问记录中设置有游标;确定游标是否从指定节点移动至第一页面对应的节点;其中,指定节点包括:第一页面的父页面对应的节点,如果游标从指定节点移动至第一页面对应的节点,执行从页面访问记录中获取子页面的历史访问频率的步骤。
基于第一页面的控制器类名,以及第一页面的父页面的控制器类名,控制游标移动至第一页面对应的节点。
判断第一页面的父页面的控制器类名是否是平行结构控制器;如果第一页面的父页面的控制器类名是平行结构控制器,判断第一页面的控制器类名是否是堆栈式控制器,得到第一判断结果,基于该第一判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器,得到第二判断结果,基于该第二判断结果,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名是平行结构控制器,控制游标移动至第一页面的父页面对应的节点;判断第一页面的控制器类名是否是堆栈式控制器,得到第三判断结果,基于该第三判断结果,控制游标移动至第一页面对应的节点。
判断第一页面的控制器类名是否是堆栈式控制器;如果第一页面的控制器类名是堆栈式控制器,控制游标移动至第一页面中的第一子页面对应的节点;如果第一页面的控制器类名不是堆栈式控制器,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器;如果第一页面的控制器类名是平行结构控制器,控制游标移动至第一页面对应的节点;如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器,得到第四判断结果,基于该第四判断结果,控制游标移动至第一页面对应的节点。
如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器;如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器,得到第五判断结果,基于该第五判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是堆栈式控制器,判断第一页面是否存在已弹出页面的视图控制器,如果存在,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器;如果第一页面正在调用第一页面的父页面的控制器,控制游标移动至第一页面对应的节点;如果第一页面没有正在调用第一页面的父页面的控制器,控制游标返回至第一页面对应的节点。
本实施例中,体现了游标的移动逻辑、游标的走向以及页面之间的层级关系,可以根据该流程图生成页面访问记录中的节点。通过执行上述步骤,能够保证用户在进行页面切换时,页面访问记录能够准确记录进入页面的方式,适时更新页面的历史访问频率。从而提高预加载数据与用户使用习惯的匹配度。
响应针对第一页面的关闭操作,判断第一页面是否存在已弹出页面的视图控制器;如果第一页面存在已弹出页面的视图控制器,控制游标移动至第一页面的父页面对应的节点;执行第一页面的视图消失函数,以将第一页面的视图控制器中的页面内容取消显示。
本实施例中,通过上述步骤,可以在视图即将显示函数监控不到的场景,准确地控制游标后退到正确的位置。
执行第一页面的视图显示函数,以将第一页面的视图控制器中的页面内容显示在图形用户界面中。
本实施例还提供一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述预加载数据的方法。
上述机器可读存储介质存储中的机器可执行指令,通过执行该机器可执行指令,可以实现上述预加载数据的方法中的下述操作:
响应于页面访问操作,确定该页面访问操作对应的第一页面;基于预设的页面之间的层级关系,确定第一页面的子页面;获取预先记录的子页面的历史访问频率;基于历史访问频率,从子页面中确定至少一个目标子页面,预加载目标子页面的页面数据,并显示第一页面。
该方式中,当访问到第一页面时,根据该页面的每个子页面历史访问频率,确定需要预加载的子页面;该方式可以使预加载的数据与用户的访问习惯相匹配,既避免了预加载数据较少,覆盖不全用户执行的操作,又避免了预加载数据量较大,浪费较多资源的情况,提高了预加载数据的有效利用率和精准度。
获取第一页面所属的目标应用的页面访问记录;其中,该页面访问记录中包括至少一个节点;每个节点对应目标应用中的一个页面;上述至少一个节点基于层级关系建立;节点中包括:节点的对应页面的控制器类名,以及对应页面的历史访问频率;从页面访问记录中获取子页面的历史访问频率。
本步骤从页面访问记录中获取子页面的历史访问频率,可以更好的了解用户的页面访问习惯。
响应针对第一页面所属的目标应用的启动操作,获取目标应用的页面访问记录;如果获取不到页面访问记录,建立目标应用的页面访问记录;其中,页面访问记录中包括目标应用的根节点;在页面访问记录中设置游标;其中,游标指向当前正在访问的页面对应的节点;在初始状态下,游标指向根节点。
通过在页面访问记录中设置游标,在用户进行页面切换时,控制游标移动,指向当前正在访问的页面对应的节点,从而,可以更好地了解用户进入页面的方式是前进进入到目标页面,还是从目标页面的子页面中返回进入目标页面,还可以确定页面访问记录中页面之间的层级关系。
确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中不包含第一页面对应的节点,基于第一页面与页面访问记录中已有节点对应的页面之间的层级关系,在页面访问记录中建立第一页面对应的节点;在第一页面对应的节点中,记录第一页面的控制器类名,并更新第一页面的历史访问频率。
页面访问操作通过第一页面的父页面触发;确定页面访问记录中是否包含第一页面对应的节点;如果页面访问记录中包含第一页面对应的节点,更新第一页面的历史访问频率。
上述页面访问记录中设置有游标;确定游标是否从指定节点移动至第一页面对应的节点;其中,指定节点包括:第一页面的父页面对应的节点,如果游标从指定节点移动至第一页面对应的节点,执行从页面访问记录中获取子页面的历史访问频率的步骤。
基于第一页面的控制器类名,以及第一页面的父页面的控制器类名,控制游标移动至第一页面对应的节点。
判断第一页面的父页面的控制器类名是否是平行结构控制器;如果第一页面的父页面的控制器类名是平行结构控制器,判断第一页面的控制器类名是否是堆栈式控制器,得到第一判断结果,基于该第一判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器,得到第二判断结果,基于该第二判断结果,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名是平行结构控制器,控制游标移动至第一页面的父页面对应的节点;判断第一页面的控制器类名是否是堆栈式控制器,得到第三判断结果,基于该第三判断结果,控制游标移动至第一页面对应的节点。
判断第一页面的控制器类名是否是堆栈式控制器;如果第一页面的控制器类名是堆栈式控制器,控制游标移动至第一页面中的第一子页面对应的节点;如果第一页面的控制器类名不是堆栈式控制器,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名不是平行结构控制器,判断第一页面的控制器类名是否是平行结构控制器;如果第一页面的控制器类名是平行结构控制器,控制游标移动至第一页面对应的节点;如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器,得到第四判断结果,基于该第四判断结果,控制游标移动至第一页面对应的节点。
如果第一页面的控制器类名不是平行结构控制器,判断第一页面的父页面的控制器类名是否是堆栈式控制器;如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器,得到第五判断结果,基于该第五判断结果,控制游标移动至第一页面对应的节点;如果第一页面的父页面的控制器类名不是堆栈式控制器,判断第一页面是否存在已弹出页面的视图控制器,如果存在,控制游标移动至第一页面对应的节点。
如果第一页面的父页面的控制器类名是堆栈式控制器,判断第一页面是否正在调用第一页面的父页面的控制器;如果第一页面正在调用第一页面的父页面的控制器,控制游标移动至第一页面对应的节点;如果第一页面没有正在调用第一页面的父页面的控制器,控制游标返回至第一页面对应的节点。
本实施例中,体现了游标的移动逻辑、游标的走向以及页面之间的层级关系,可以根据该流程图生成页面访问记录中的节点。通过执行上述步骤,能够保证用户在进行页面切换时,页面访问记录能够准确记录进入页面的方式,适时更新页面的历史访问频率。从而提高预加载数据与用户使用习惯的匹配度。
响应针对第一页面的关闭操作,判断第一页面是否存在已弹出页面的视图控制器;如果第一页面存在已弹出页面的视图控制器,控制游标移动至第一页面的父页面对应的节点;执行第一页面的视图消失函数,以将第一页面的视图控制器中的页面内容取消显示。
本实施例中,通过上述步骤,可以在视图即将显示函数监控不到的场景,准确地控制游标后退到正确的位置。
执行第一页面的视图显示函数,以将第一页面的视图控制器中的页面内容显示在图形用户界面中。
本发明实施例所提供的预加载数据的方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。