发明内容
本发明的目的是提供一种数据预加载的方法和系统,实现启动应用时,提升查询加载速率的效果。
本发明提供的技术方案如下:
本发明提供一种数据预加载的方法,包括步骤:S600终端接收并安装应用程序;S700所述终端获取包括第一查询条件的加载命令;S800所述终端根据所述第一查询条件生成第一索引值;S900所述终端根据所述第一索引值,获取目标数据并加载至第一储存区域。
进一步的,所述步骤S600之前包括步骤:S100服务器获取包括所述第一查询条件和第二查询条件的加载命令;所述第二查询条件包括所述第一查询条件;S200所述服务器根据所述第一查询条件生成所述第一索引值,根据所述第二查询条件将所述第一索引值生成第二索引值;所述第二索引值包括所述第一索引值;S300所述服务器根据所述第二索引值分类数据信息,得到对应的数据文件;S400所述服务器根据所述第二索引值分别命名所述数据文件,并分类储存所述数据文件;S500所述服务器发送应用程序文件至所述终端。
进一步的,所述步骤S600包括步骤:S610所述终端接收所述服务器发送的所述应用程序文件;S620所述终端根据所述应用程序文件,在第二储存区域安装所述应用程序,并在所述第一储存区域运行所述应用程序脚本。
进一步的,所述步骤S900包括步骤:S910所述终端根据所述第一索引值得到对应的第二索引值,发送所述第一索引值和所述对应的第二索引值至所述服务器;S920所述服务器接收所述第一索引值和所述对应的第二索引值,并根据所述对应的第二索引值查找对应的数据文件;S930所述服务器根据所述第一索引值在所述对应的数据文件中查找所述目标数据,并发送所述目标数据至所述终端;S940所述终端接收所述目标数据,将所述目标数据在所述第一储存区域进行加载显示,并在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至所述第二储存区域。
进一步的,所述步骤S500包括步骤:S510所述服务器发送所述应用程序文件和所述数据文件至所述终端;所述步骤S600还包括步骤:S630所述终端接收所述服务器发送的所述应用程序文件和所述数据文件;S640所述终端根据所述应用程序文件,在第二储存区域安装所述应用程序,并在所述第一储存区域运行所述应用程序脚本;S650所述终端根据所述第二索引值保存所述数据文件至所述第二储存区域。
进一步的,所述步骤S900还包括步骤:S950所述终端根据所述第一索引值得到对应的第二索引值;S960所述终端根据所述对应的第二索引值从所述第二储存区域查找对应的数据文件;S970所述终端根据所述第一索引值在所述对应的数据文件中获取所述目标数据;S980所述终端将所述目标数据在所述第一储存区域进行加载显示,并在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至第三储存区域。
进一步的,所述步骤S900还包括步骤:S990所述终端将其余加载数据按照对应的第二索引值分类保存至所述第三储存区域;所述其余加载数据为所述数据文件中除所述目标数据外的数据。
本发明还提供一种数据预加载的系统,包括:终端和服务器;所述终端包括:接收模块,接收应用程序文件;安装模块,安装应用程序;第一获取模块,获取包括第一查询条件的加载命令;第一生成模块,将所述第一查询条件生成第一索引值;第一储存区域,用于加载数据;控制模块,根据所述第一索引值,获取目标数据并加载至所述第一储存区域;所述服务器包括:第二获取模块,获取包括所述第一查询条件和第二查询条件的加载命令;所述第二查询条件包括所述第一查询条件;第二生成模块,根据所述第一查询条件生成所述第一索引值,根据所述第二查询条件将所述第一索引值生成第二索引值;所述第二索引值包括所述第一索引值;分类模块,根据所述第二索引值分类数据信息,得到对应的数据文件;保存模块,根据所述第二索引值分别命名所述数据文件,并分类储存所述数据文件;第二发送模块,发送所述应用程序文件至终端。
进一步的,所述第二发送模块,还发送所述应用程序文件和所述数据文件至所述终端;所述接收模块,还接收所述应用程序文件和所述数据文件;所述安装模块,根据所述应用程序文件,在第二储存区域安装所述应用程序,并在所述第一储存区域运行所述应用程序脚本;所述终端还包括第二储存区域,根据所述第二索引值保存所述数据文件至所述第二储存区域。
进一步的,所述控制模块包括:处理单元,根据所述第一索引值得到对应的第二索引值;查找单元,根据所述对应的第二索引值从所述第二储存区域查找对应的数据文件;获取单元,根据所述第一索引值在所述对应的数据文件中获取所述目标数据;加载单元,将所述目标数据在所述第一储存区域进行加载显示;控制单元,在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至第三储存区域。
通过本发明提供的一种数据预加载的方法和系统,能够带来以下至少一种有益效果:
1)本发明实现启动应用时,加快应用程序的启动速度,同时还能提升加载的速率,提升用户使用体验。
2)本发明使得应用程序显示界面显示目标数据时,可以加快应用程序的启动速度,达到优化RAM的效果。
3)本发明解决了加载内存耗费,APK大小控制以及应用第一次启动的耗时问题,使得应用启动时较快的加载目标数据,并且使得内存空间占用较小以及APK文件较小。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
RAM(Random Access Memory-随机存取存储器),是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。它的特点是易挥发性,即掉电失忆,速度高于ROM,对于手机配置性能起着重要的决定性,另外掉电后,数据被清空,比如手机运行着QQ与其它应用程序,重启手机后,应用程序就没有处于登录状态。
ROM(Read-Only Memory,只读内存),是一种只能读出事先所存数据的固态半导体存储器,其特性是一旦储存资料就无法再将之改变或删除,通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为断电后信息而丢失,存取速度很低,(较RAM而言)且不能改写,常用于存储各种固定程序和数据。
缓存(Cache),一般是用于RAM存储器,用于存储临时数据,断电后存储的内容会消失。缓存是临时文件交换区,把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比需要使用再去仓库取更方便。
以下所有实施例中,第一储存区域为RAM,第二储存区域为ROM;第三储存区域为缓存或数据库。
图1是本发明一种数据预加载的方法的一个实施例,包括:
S600终端接收并安装应用程序;
S700所述终端获取包括第一查询条件的加载命令;
S800所述终端根据所述第一查询条件生成第一索引值;
S900所述终端根据所述第一索引值,获取目标数据并加载至第一储存区域。
具体的,本实施例中,手机、电脑、平板等等应用终端通过网络从服务器获取应用程序的安装包,从而安装相应的应用程序,获取用户的加载命令,从而根据加载命令中的第一查询条件生成第一索引值,再根据第一索引值获取目标数据并预加载至第一储存区域,这里第一储存区域为RAM。现有技术中,将所有数据均预先储存到RAM,然而将所有数据储存到RAM中,一是将容量较大的数据储存至RAM会增加等待时间。二是会导致需要将所有数据加载完成后才能显示,这样会使得终端的应用程序界面会长时间出现空白内容,影响用户的使用体验。不同于现有技术,本发明实时获取第一查询条件的加载命令,根据第一查询条件得到第一索引值,从而根据第一索引值获取目标数据进行预加载,这样能够根据用户的查询需要或使用要求来有针对性的,有目的性的获取目标数据,从而至预先加载目标数据到RAM,这样,能够相对于现有技术,减少了加载至RAM的数据的大小,减轻RAM的负担,提升RAM的性能,从而使得应用程序显示界面显示目标数据时,可以加快应用程序的启动速度,达到优化RAM的效果。
图2是本发明一种数据预加载的方法的另一个实施例,包括:
S100服务器获取包括所述第一查询条件和第二查询条件的加载命令;所述第二查询条件包括所述第一查询条件;
S200所述服务器根据所述第一查询条件生成所述第一索引值,根据所述第二查询条件将所述第一索引值生成第二索引值;所述第二索引值包括所述第一索引值;
S300所述服务器根据所述第二索引值分类数据信息,得到对应的数据文件;
S400所述服务器根据所述第二索引值分别命名所述数据文件,并分类储存所述数据文件;
S500所述服务器发送应用程序文件至所述终端;
S610所述终端接收所述服务器发送的所述应用程序文件;
S620所述终端根据所述应用程序文件,在第二储存区域安装所述应用程序,并在所述第一储存区域运行所述应用程序脚本;
S700所述终端获取包括第一查询条件的加载命令;
S800所述终端根据所述第一查询条件生成第一索引值;
S910所述终端根据所述第一索引值得到对应的第二索引值,发送所述第一索引值和所述对应的第二索引值至所述服务器;
S920所述服务器接收所述第一索引值和所述对应的第二索引值,并根据所述对应的第二索引值查找对应的数据文件;
S930所述服务器根据所述第一索引值在所述对应的数据文件中查找所述目标数据,并发送所述目标数据至所述终端;
S940所述终端接收所述目标数据,将所述目标数据在所述第一储存区域进行加载显示,并在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至所述第二储存区域。
具体的,本实施例中,本发明通过服务器端对所有数据根据第二索引值分别命名储存得到不同的数据文件,然后将这些数据文件储存在服务器端自身的储存器中,仅仅将用户需要的应用程序文件打包在APK包中,服务器将APK数据包发送至终端,终端将打包的APK数据包进行解压安装。当用户需要使用应用程序时,就会获取第一索引值,根据第一索引值得到对应的第二索引值,然后根据对应的第二索引值从服务器的储存器中查找到对应的数据文件,再根据第一索引值从对应的数据文件中查找并获取目标数据,之后服务器就会通过网络实时将目标数据一起打包发送给终端,终端接收服务器发送的目标数据,然后在终端的RAM中进行加载显示,因为只获取目标数据,通过本发明的数据处理方法,可提高Android平台应用的加载速度,并且优化了内存占用和APK文件的大小,提高用户体验。另外,如果目标数据太大,即使使用二进制编码和压缩技术,仍然占用较大的空间无法达到要求时,可以将目标数据放至服务器数据库中,在应用程序启动时使用网络加载的方式动态下载数据给予解决。本发明解决了加载内存耗费,APK大小控制以及应用第一次启动的耗时问题,使得应用启动时较快的加载目标数据,并且使得内存空间占用较小以及APK文件较小。本发明分割了预加载的数据,使得应用程序在第一次启动时,显示界面前只需要加载目标数据,所以可以加快应用启动速度和优化内存占用。
图3是本发明一种数据预加载的方法的另一个实施例,包括:
S100服务器获取包括所述第一查询条件和第二查询条件的加载命令;所述第二查询条件包括所述第一查询条件;
S200所述服务器根据所述第一查询条件生成所述第一索引值,根据所述第二查询条件将所述第一索引值生成第二索引值;所述第二索引值包括所述第一索引值;
S300所述服务器根据所述第二索引值分类数据信息,得到对应的数据文件;
S400所述服务器根据所述第二索引值分别命名所述数据文件,并分类储存所述数据文件;
S510所述服务器发送所述应用程序文件和所述数据文件至所述终端;
S630所述终端接收所述服务器发送的所述应用程序文件和所述数据文件;
S640所述终端根据所述应用程序文件,在第二储存区域安装所述应用程序,并在所述第一储存区域运行所述应用程序脚本;
S650所述终端根据所述第二索引值保存所述数据文件至所述第二储存区域;
S700所述终端获取包括第一查询条件的加载命令;
S800所述终端根据所述第一查询条件生成第一索引值;
S950所述终端根据所述第一索引值得到对应的第二索引值;
S960所述终端根据所述对应的第二索引值从所述第二储存区域查找对应的数据文件;
S970所述终端根据所述第一索引值在所述对应的数据文件中获取所述目标数据;
S980所述终端将所述目标数据在所述第一储存区域进行加载显示,并在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至第三储存区域。
具体的,本实施例中,首先需要服务器将大量的,无规律性的数据进行归类并分类处理,本发明根据获取的第二查询条件进行将网络上获取的数据或者服务器自身储存的数据或者管理人员写入的数据进行分类储存,实时生成以不同第二索引值命名保存的数据文件,加快对查找或搜索的效率。例如,在Android平台开发中,经常会涉及到需要展示目标数据的功能,这通常需要从应用程序安装包(APK,以下简称APK)中预加载大量的数据到内存中,并根据加载的数据使用特定条件查询出需要的数据进行展示。而如何在应用启动时加载大量数据而不影响数据展示成为该功能实现中最核心的问题。目前在Android平台大量数据的预加载通常采用以下两种方式:
1、APK中预置SQLite数据库表文件,在应用第一次启动时,将该文件复制到该应用程序指定数据库路径下从而可以直接读取数据库进行数据查询和展示。
2、APK中预置数据文件,该文件可以是二进制编码,在应用第一次启动时,将该文件解析并读入内存,从而可以直接进行数据查询和展示,并可以生成缓存文件或数据库,供应用下一次启动时直接使用。
上述两种方式,在数据量较小的情况下是可行的,但是对于数据量较大的情况下,则出现较为明显的弊端。方式1中使用数据库文件,在数据量较大时,文件必定较大。此时APK必然较大,影响用户体验,并且启动应用时需要将数据库文件进行复制,较为耗时。而方式2中使用二进制文件,可以相对舍去冗余数据,解决了APK太大的问题,而这种方式需要在应用加载时将数据全部加载到内存中,占用大量内存,对于虚拟机内存定义较小的设备极容易达到上限而发生内存不足(Out Of Memory,OOM)而退出,并且没有解决耗时问题。
本发明通过服务器端对所有数据根据第二索引值分别命名储存得到不同的数据文件,然后将这些数据文件与应用程序文件一起打包在APK包中,服务器将APK数据包发送至终端,终端将打包的APK数据包进行解压,将数据文件保存至终端的第二储存区域,这里第二储存区域为ROM。当用户需要使用应用程序时,就会获取第一索引值,根据第一索引值得到对应的第二索引值,然后根据对应的第二索引值与服务器生成的第二索引值进行匹配,根据匹配结果从ROM中查找到对应的数据文件,再根据第一索引值从对应的数据文件中查找并获取目标数据,因为只获取目标数据,通过本发明的数据处理方法,可提高Android平台应用的加载速度,并且优化了内存占用和APK文件的大小,提高用户体验。
优选的,所述步骤S900还包括步骤:
S990所述终端将其余加载数据按照对应的第二索引值分类保存至所述第三储存区域;所述其余加载数据为所述数据文件中除所述目标数据外的数据。
通过预先将其余加载数据分类储存至第三储存区域,这里第三储存区域为缓存或数据库,能够使得后期用户使用应用程序时,能够快速的调用需要的其余加载数据为目标数据进行加载显示,提高应用程序的加载速度,提高用户体验。
下面,为了便于理解,举个例子,这里使用日历程序需要1900~2100年间的黄历数据作为例子来具体说明,黄历数据包括日期,宜和忌的数据信息。如图4所示,包括步骤:
S11、对所有的数据根据第一查询条件计算索引值;
这里需要计算所有数据的索引值。针对黄历数据,显而易见第一查询条件是日期,这里使用直接拼接的算法计算索引值,例如2017年6月24日,计算出的第一索引值为20170624的整型类型数据(如果是其他类型的数据,可以使用哈希算法算出哈希值作为索引值,在此不例举)。
S12、根据第二查询条件,将第一索引值生成第二索引值;
这里根据需要,取第一索引值的前4位来生成第二索引值,例如第一索引值为20170624,取前4位得到2017为第二索引值。
S13、将S12算出的第二索引值作为数据文件的文件名,并将数据分类保存至若干对应的数据文件中。
这样,1900~2100年间这200年间的黄历数据可分为200个数据文件,并与应用程序文件一起压缩打包成APK数据包发送给终端。如图5所示,包括步骤:
S21、将所有数据文件根据对应的第二索引值分类保存至ROM中;
这里,将S13步中生成的数据包解压至应用程序数据目录下。终端接收APK数据包后,解压APK数据包,根据应用程序文件进行安装应用程序,并将数据文件根据对应的第二索引值分类保存至ROM中。
S22、根据第一查询条件和与S11相同的算法进行计算得到第一索引值;
这里,针对黄历数据,日历程序加载时显示的是当月日历并显示当天的黄历信息,所以需要至少当天的数据,根据当天日期2017年6月24日计算第一索引值,需要使用S11步相同的算法,得到第一索引值20170624。
S23、根据S22得到的第一索引值得到对应的第二索引值,并根据第二索引值找到相应的数据文件,根据第一索引值从相应的数据文件中查找获取目标数据;
这里,计算出第一索引值20170624后,根据与S12相同的算法得到第二索引值为2017,并找到文件名为2017的数据文件。
S24、在RAM加载S23查找获取的目标数据并显示;
这里,由于总数据量只有所有数据的二百分之一,所以加载速度和内存占用均较小,并可以尽快完成应用程序的显示目标数据。
S25、加载显示的同时,将目标数据储存至缓存,并将其余数据储存至缓存;
这里,创建子线程,在子线程中异步将S24加载的目标数据保存为缓存文件或者储存至数据库中,并且加载其余199年的其余数据,同时保存为缓存文件或者缓存数据库,供下次应用程序启动时使用。
通过本发明的数据处理方法,可提高如Android平台、IOS应用平台等应用程序的加载速度,并且优化了内存占用和APK文件的大小,提高用户体验。
参考图6所示,本发明提供一种数据预加载的系统1000的一个实施例,包括:终端100和服务器200;所述终端100包括:
接收模块110,接收应用程序文件;
安装模块120,安装应用程序;
第一获取模块130,获取包括第一查询条件的加载命令;
第一生成模块140,将所述第一查询条件生成第一索引值;
第一储存区域150,用于加载数据;
控制模块160,根据所述第一索引值,获取目标数据并加载至所述第一储存区域150;
所述服务器200包括:
第二获取模块210,获取包括所述第一查询条件和第二查询条件的加载命令;所述第二查询条件包括所述第一查询条件;
第二生成模块220,根据所述第一查询条件生成所述第一索引值,根据所述第二查询条件将所述第一索引值生成第二索引值;所述第二索引值包括所述第一索引值;
分类模块230,根据所述第二索引值分类数据信息,得到对应的数据文件;
保存模块240,根据所述第二索引值分别命名所述数据文件,并分类储存所述数据文件;
第二发送模块250,发送所述应用程序文件至终端100。
具体的,本实施例中,服务器200生成数据文件,然后终端100实时获取第一查询条件的加载命令,根据第一查询条件得到第一索引值,从而根据第一索引值获取目标数据进行预加载,这样能够根据用户的查询需要或使用要求来有针对性的,有目的性的获取目标数据,从而至预先加载目标数据到RAM,这样,能够相对于现有技术,减少了加载至RAM的数据的大小,减轻RAM的负担,提升RAM的性能,从而使得应用程序显示界面显示目标数据时,可以加快应用程序的启动速度,达到优化RAM的效果。
参考图7所示,本发明提供一种数据预加载的系统1000的另一个实施例,本实施例中其他部分与上一实施例相同;此外:
所述第二发送模块250,还发送所述应用程序文件和所述数据文件至所述终端100;
所述接收模块110,还接收所述应用程序文件和所述数据文件;
所述安装模块120,根据所述应用程序文件,在第二储存区域170安装所述应用程序,并在所述第一储存区域150运行所述应用程序脚本;
所述终端100还包括第二储存区域170,根据所述第二索引值保存所述数据文件至所述第二储存区域170;
所述终端还包括第三储存区域180,根据所述第二索引值保存所述数据文件至所述第三储存区域180;
此外,所述控制模块160包括:
处理单元161,根据所述第一索引值得到对应的第二索引值;
查找单元162,根据所述对应的第二索引值从所述第二储存区域170查找对应的数据文件;
获取单元163,根据所述第一索引值在所述对应的数据文件中获取所述目标数据;
加载单元164,将所述目标数据在所述第一储存区域150进行加载显示;
控制单元165,在加载显示的同时,将所述目标数据按照所述对应的第二索引值分类保存至第三储存区域180。
具体的,本实施例中,分为生成数据文件和加载目标数据两个部分,其中数据文件的生成有服务器200端进行完成,目标数据的加载由终端100完成。服务器200将数据分类得到若干数据文件,数据文件的数量根据数据的大小和类型决定,服务器200根据第二索引值对每个数据文件进行命名,其中,数据文件的生成是服务器200根据对数据的使用的第一查询条件,使用方法实施例中的直接拼接方法或者哈希算法进行编码,得到第一索引值,然后通过方法实施例中的方法将第一索引值进行计算得到第二索引值,其中,需要保障第二索引值的范围在合理的范围内,需要第二索引值包括第一索引值,该范围决定了数据文件分割的数量。将数据按第二索引值进行分类,分别生成以对应的第二索引值命名的数据文件,将其与应用程序文件与所有数据文件进行压缩打包发送至终端100,终端100安装应用程序,并将数据文件根据第二索引值分类储存至自身的ROM中,终端100获取第一查询条件,根据第一查询条件,使用和服务器200一样的算法生成第一索引值,再根据第一索引值以及和服务器200一样的算法生成第二索引值,根据第二索引值从ROM中查找到对应的数据文件,然后从对应的数据文件中查找获取目标数据,单独加载目标数据到RAM中使用,并使用子线程异步将数据存储到数据库或缓存中。如果使用缓存,则可以使用类似的方法进行,即将数据文件分类储存至自身的ROM中,根据需要获取目标数据加载至缓存中。使用子线程异步加载其余的数据文件,并将数据存储到数据库或缓存中。在应用程序后续的使用中,直接读取缓存或者数据库中的数据即可。
本发明所有实施例中,在所有数据全部加载之前,对目标数据进行预先加载,以提供给用户更好的体验,减少等待的时间。否则,如果应用程序的目标数据过于庞大,没有使用预加载技术的应用程序就会长时间的展现为一片空白,直到所有内容加载完毕才能加载显示。本发明能够提升加载的速度,还能够显著减小RAM的占用,减轻RAM的负担,提升第一储存区域的性能,从而使得应用程序显示界面显示目标数据时,可以加快应用程序的启动速度,达到优化RAM的效果。
本发明所有实施例中,可以先判断终端100与服务器200之间的网络连接状态,查看网速是否达到预设值,达到终端100可以使用第二个实施例的方法进行数据的预加载,如果网速未达到预设值,终端100就可以使用第三个实施例的方法进行数据的预加载。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。