一种智能加载系统、方法、存储介质及设备
技术领域
本发明涉及智能加载技术领域,具体涉及一种智能加载系统、方法、存储介质及设备。
背景技术
在Android的开发过程中,传统的开发过程中是通过在主线程中调用inflate的方式来对页面进行加载的;
但传统的方法存在缺陷,当存在多个界面被同时加载的时候会导致inflate被多次调用,且infalte的调用工作都在主线程中运行,会导致主线程的负担过大,从而导致infalte调用速度变慢,最终导致页面加载速度变慢。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种智能加载系统、方法、存储介质及设备,能够有效的缓解主线程中加载布局的压力,极大的提高效率,提高页面被呈现的速度。
为达到以上目的,本发明采取的技术方案是:
一种智能加载系统,该系统包括:
加载协议模块,其内置一加载协议,并定义一加载方法,所述加载方法用于接收标记视图资源信息的资源ID,从而获取所述资源ID对应的视图资源;
第一单元,其继承所述加载协议,用于调用主线程加载器根据所述视图资源进行页面加载并进行UI更新;
第二单元,其用于调用子线程加载器根据所述视图资源进行页面加载并借助所述第一单元进行UI更新。
在上述技术方案的基础上,智能加载系统还包括:
处理线程单元,其内构件一处理线程对象,借助所述处理线程对象,所述处理线程能够与主线程进行通信;
所述第二单元调用子线程加载器进行页面加载,并借助所述处理线程与所述第一单元通信,进行UI更新。
在上述技术方案的基础上,智能加载系统还包括:
CPU监测模块,其内置一映射关系,所述映射关系内包含第一参数、CPU温度值以及CPU使用率,所述第一参数用于表示加载线程的值;
根据所述第一参数的数值,选择所述第一单元或所述第二单元开启UI更新工作。
在上述技术方案的基础上,智能加载系统还包括:
创建多个所述第二单元,多个所述第二单元均可调用所述子线程加载器根据所述视图资源进行页面加载并借助所述第一单元进行UI更新。
一种智能加载方法,该方法包括:
创建一加载协议,所述加载协议中定义一加载方法,所述加载方法用于接收标记视图资源信息的资源ID,从而获取所述资源ID对应的视图资源;
创建第一单元以及第二单元,所述第一单元继承所述加载协议,利用所述第一单元调用主线程加载器根据所述视图资源进行页面加载并进行UI更新,利用所述第二单元调用子线程加载器根据所述视图资源进行页面加载并借助所述第一单元进行UI更新。
在上述技术方案的基础上,智能加载方法还包括以下步骤:
创建一处理线程,所述处理线程内构件一处理线程对象,利用所述处理线程借助所述处理线程对象与主线程进行通信;
利用所述第二单元调用子线程加载器进行页面加载,并借助所述处理线程与所述第一单元通信,进行UI更新。
在上述技术方案的基础上,智能加载方法还包括以下步骤:
创建一映射关系,所述映射关系内包含第一参数、CPU温度值以及CPU使用率,所述第一参数用于表示加载线程的值;
根据所述第一参数的数值,选择所述第一单元或所述第二单元开启UI更新工作。
在上述技术方案的基础上,智能加载方法还包括以下步骤:
创建多个所述第二单元,多个所述第二单元均可调用所述子线程加载器根据所述视图资源进行页面加载并借助所述第一单元进行UI更新。
一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述技术方案中的智能加载方法的步骤。
一种智能加载设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述技术方案中的智能加载方法的步骤。
在上述技术方案的基础上,所述结果输出模块还用于依据所述剪裁子图片的数量,对各所述剪裁子图片进行编号。
与现有技术相比,本发明的优点在于:
(1)本发明利用自定义的加载协议模块、第一单元以及第二单元进行智能加载工作,避免主线程负担过大,避免导致infalte调用速度变慢,最终导致页面加载速度变慢的问题;
与现有技术相比,本发明能够有效的缓解主线程中加载布局的压力,极大的提高效率,提高页面被呈现的速度。
(2)本发明创建CPU监测模块,从而对第一单元以及第二单元进行选择;
与现有技术相比,本发明创建的CPU监测模块使得CPU能够在保证处理速度,避免因CPU使用率较高而造成的处理速度慢。
附图说明
图1为本发明实施例中智能加载系统的结构框图;
图2为本发明实施例中智能加载方法的流程图;
图3为本发明实施例中智能加载设备的结构框图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细说明。
参见图1所示,本发明实施例提供一种智能加载系统,包括:
加载协议模块,其内置一加载协议,并定义一加载方法,加载方法用于接收标记视图资源信息的资源ID,从而获取资源ID对应的视图资源;
第一单元,其继承加载协议,用于调用主线程加载器根据视图资源进行页面加载并进行UI更新;
第二单元,其用于调用子线程加载器根据视图资源进行页面加载并借助第一单元进行UI更新。
本发明中的加载协议模块用于利用其内置的加载协议中的加载方法接收资源ID,进而获取资源ID对应的视图资源,从而为后期的UI更新提供数据依据;
第一单元具有直接进行UI更新的功能,其继承加载协议,能够调用主线程加载器,并根据通过加载协议获取的视图资源进行页面加载,并进行UI更新;
第二单元能够开启UI更新工作,但其自身并不具备UI更新功能,在需要进行UI更新工作时,第二单元调用子线程加载器根据视图资源进行页面加载,并借助第一单元进行UI更新。
本发明能够有效的缓解主线程中加载布局的压力,极大的提高效率,提高页面被呈现的速度。
需要说明的是,第一单元的加载方法中是通过调用主线程加载器来对页面进行加载的,具体是通过调用InflaterManager中的infalte方法来对视图资源进行加载,然后将加载好的视图对象返回;
第二单元的加载方法中是通过调用子线程加载器来对页面进行加载的,具体是通过调用线程池Threadpool中的exec方法来开启一个新的线程,然后在新的线程中调用InflaterManager中的infalte方法来对视图资源进行加载,然后将加载好的视图对象在当前线程中进行返回。
其中,为了使得加载器能够具有更高的扩张性,尤其是主线程加载器,在设计主线程加载器时,在主线程加载器内配置一加载协议模块,并在加载协议模块内定义了一加载协议,具体的加载协议设计如下所示:
Public interface InflateView{
Public View inflate(intresourceId)
}
接下来我们对上述的加载协议进行相关的说明。
加载协议的名称是InflateView,我们在该加载协议中定义了一套加载方法,加载方法的名称是inflate,该加载方法需要传递一个参数信息,参数是一个资源ID,可记作resourceId,该资源ID用于作为一个视图资源信息的唯一标示;
通过inflate方法的处理后会将该资源ID所对应的视图对象view进行返回,也就是我们需要展示的视图对象view。
本实施例中,智能加载系统还包括:
处理线程单元,其内构件一处理线程对象,借助处理线程对象,处理线程能够与主线程进行通信;
第二单元调用子线程加载器进行页面加载,并借助处理线程与第一单元通信,进行UI更新;
处理线程单元用于帮助第二单元与第一单元进行通信,以便第二单元借助第一单元进行UI更新,从而实现消息的传递,最终使得第一单元、第二单元为UI更新工作进行服务。
其中,在Android的开发过程中有一个HandlerThread类,该类可以实现消息的循环结构,但是实现消息循环的时候需要指定一个消息循环线程;
由于每个应用在消息存在一个默认的消息循环线程,即主线程,所以我们通过构建一个HandlerThread类,通过该类的构造方法来构建一个handlerThread对象,并将主线程传递给该对象,这样handlerThread就具备了和主线程通信的能力;
当在第二单元中需要更新UI的时候,此时需要获取到handlerThread对象,然后调用其中的post方法将消息转发到主线程中,主线程会在handlerMessage方法中接收该消息,然后在对应的消息中处理更新子线程中所需要更新的UI信息;
从而实现第二单元调用子线程加载器进行页面加载,并借助处理线程与第一单元通信,进行UI更新的过程。
本实施例中,智能加载系统还包括:
CPU监测模块,其内置一映射关系,映射关系内包含第一参数、CPU温度值以及CPU使用率,第一参数用于表示加载线程的值;
根据第一参数的数值,选择第一单元或第二单元开启UI更新工作;
利用CPU监测模块,从而对第一单元以及第二单元进行选择,使得CPU能够在保证处理速度,避免因CPU使用率较高而造成的处理速度慢。
需要说明的是,设置CPU监测模块的目标是当主线程资源丰富的时候直接在主线程中对布局进行加载,因为在主线程中系统维护了一套消息循环,故而不用单独的去维系一套消息循环逻辑,可以直接在主线程中对界面元素进行更新,所以优先考虑在主线程中对布局进行加载;
但当主线程资源比较紧张的时,需要考虑在子线程中加载布局,在子线程中加载布局有一个缺陷就是子线程本身是不存在消息循环的,如果需要考虑使用消息循环逻辑,此时需要额外的维护一个消息处理器,并且在子线程中是无法对UI进行任何更新操作的,所以在子线程中被加载的界面如果需要对UI进行任何的操作都需要将消息通过消息器发送到主线程中,然后在主线程中对UI进行更新操作。
基于上述的分析,可知在主线程空闲就在主线程加载布局,否则在子线程加载布局逻辑;
为了将上述目标进行量化,设计了如下的映射关系:
InflateThread=K/(cpu*main*temp)
接下来我们将描述一下具体的映射关系含义。
Cpu参数表示当前的CPU使用率,当CPU使用率越高的时候infalteThread的值越小,反之越大,temp参数表示当前CPU的温度信息,当CPU的温度越高的时候此时说CPU负担越重,此时的inflateTheread的值就越小,main参数表示的是主线程的使用率,当主线程使用率越高InflateThread的值越小,反之则越大;
K表示一个调节系数,主要是用于调节参数的区间范围的;
InflateThread表示的是加载线程的值,当InflateThread的值小于1的时候是使用子线程加载,大于等于1的时候使用主线程加载。
通过上述的定量映射关系我们可以通过判定InflateThread的值的取值范围来动态的调整加载策略。
依据上述技术方案创建的CPU监测模块能够对加载器进行动态的调配,CPU监测模块配置一加载器管理者LoaderManager,让LoaderManager来动态的调整加载模式;
当InflateThread的值小于1的时候使用第二单元来对管理器中的InflateView协议赋值,否则使用第一单元对InflateView协议赋值;
然后管理器通过调用InflateView协议中的inflate方法来实现真实的加载流程,通过这种设计就能够实现动态的调整加载器的目标,并进行智能的加载器的实现。
本实施例中,智能加载系统还包括:
创建多个第二单元,多个第二单元均可调用子线程加载器根据视图资源进行页面加载并借助第一单元进行UI更新。
参见图2所示,一种智能加载方法,该方法包括以下步骤:
创建一加载协议,加载协议中定义一加载方法,加载方法用于接收标记视图资源信息的资源ID,从而获取资源ID对应的视图资源;
创建第一单元以及第二单元,第一单元继承加载协议,利用第一单元调用主线程加载器根据视图资源进行页面加载并进行UI更新,利用第二单元调用子线程加载器根据视图资源进行页面加载并借助第一单元进行UI更新。
本实施例中,智能加载方法还包括以下步骤:
创建一处理线程,处理线程内构件一处理线程对象,利用处理线程借助处理线程对象与主线程进行通信;
利用第二单元调用子线程加载器进行页面加载,并借助处理线程与第一单元通信,进行UI更新。
本实施例中,智能加载方法还包括以下步骤:
创建一映射关系,映射关系内包含第一参数、CPU温度值以及CPU使用率,第一参数用于表示加载线程的值;
根据第一参数的数值,选择第一单元或第二单元开启UI更新工作。
本实施例中,智能加载方法还包括以下步骤:
创建多个第二单元,多个第二单元均可调用子线程加载器根据视图资源进行页面加载并借助第一单元进行UI更新。
一种存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中智能加载方法的步骤。
参见图3所示,一种智能加载设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中智能加载方法的步骤。
需要说明的是:上述实施例提供的系统在实现智能加载操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可根据需要而将上述功能分配由不同功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。