一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于划分时间片的加载方法、系统、存储介质及其计算机设备与流程

2021-11-09 22:56:00 来源:中国专利 TAG:


1.本发明涉及安卓系统屏幕刷新技术领域,尤其涉及一种基于划分时间片的加载方法、系统、存储介质及其计算机设备。


背景技术:

2.当加载或刷新大量或超量控件时,界面刷新帧率降低,单帧绘制时间延迟,导致明显卡顿。当加载或刷新大量或超量控件时,android系统会一次性全部加载绘制在手机屏幕,这样系统测量绘制这些控件的时间超出了手机的刷新帧率,就会丢帧,然后给用户造成卡顿的视觉反馈。即使有异步加载,也只能解决一次加载问题,不能解决丰富的屏幕刷新效率问题。
3.综上可知,现有的方法在实际使用上,存在着较多的问题,所以有必要加以改进。


技术实现要素:

4.针对上述的缺陷,本发明的目的在于提供一种基于划分时间片的加载方法、系统、存储介质及其计算机设备,以解决安卓系统界面刷新的卡顿问题。
5.为了实现上述目的,本发明提供一种基于划分时间片的加载方法,其特征在于,包括:
6.根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组;
7.将所述控件组以预设的优先级存入消息队列中;
8.当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。
9.根据所述的基于划分时间片的加载方法,所述将所述控件组以预设的优先级存入消息队列中的步骤包括:
10.将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。
11.优选的是,所述当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上的步骤进一步包括:
12.注册一系统刷新机制以对系统屏幕刷新进行监听;
13.当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;
14.根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
15.更好的是,所述当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上的步骤包括:
16.将提取的所述消息发送至系统的主线程消息处理。
17.还提供了一种基于划分时间片的加载系统,包括:
18.划分单元,用于根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组;
19.存储单元,用于将所述控件组以预设的优先级存入消息队列中;
20.提取绘制单元,用于当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。
21.所述存储单元具体用于:
22.将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。
23.优选的是,所述提取绘制单元包括有:
24.注册子单元,用于注册一系统刷新机制以对系统屏幕刷新进行监听;
25.提取子单元,用于当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;
26.绘制子单元,用于根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
27.更好的是,所述提取绘制单元还用于将提取的所述消息发送至系统的主线程消息处理。
28.另外,还提供了一种存储介质和计算机设备,所述存储介质用于存储一种用于执行上述基于划分时间片的加载方法的计算机程序。
29.所述计算机设备包括存储介质、处理器以及存储在所述存储介质上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的基于划分时间片的加载方法。
30.本发明所述的基于划分时间片的加载方法使用分时间片加载技术,将本来需要一帧绘制的控件分散到连续多帧之中绘制,解决卡顿问题。还提供了一种基于划分时间片的加载系统、用于存储执行所述方法的计算机程序的存储介质以及实现所述方法的计算机设备。
附图说明
31.图1为本发明优选实施例采用的所述基于划分时间片的加载方法的步骤流程图;
32.图2为本发明优选实施例所述基于划分时间片的加载系统的结构框图;
33.图3为本发明优选实施例所述基于划分时间片的加载系统的具体结构示意框图。
具体实施方式
34.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
35.需要说明的,本说明书中针对“一个实施例”、“实施例”、“示例实施例”等的引用,指的是描述的该实施例可包括特定的特征、结构或特性,但是不是每个实施例必须包含这些特定特征、结构或特性。此外,这样的表述并非指的是同一个实施例。进一步,在结合实施例描述特定的特征、结构或特性时,不管有没有明确的描述,已经表明将这样的特征、结构或特性结合到其它实施例中是在本领域技术人员的知识范围内的。
36.此外,在说明书及后续的权利要求当中使用了某些词汇来指称特定组件或部件,所属领域中具有通常知识者应可理解,制造商可以用不同的名词或术语来称呼同一个组件
或部件。本说明书及后续的权利要求并不以名称的差异来作为区分组件或部件的方式,而是以组件或部件在功能上的差异来作为区分的准则。在通篇说明书及后续的权利要求书中所提及的“包括”和“包含”为一开放式的用语,故应解释成“包含但不限定于”。以外,“连接”一词在此系包含任何直接及间接的电性连接手段。间接的电性连接手段包括通过其它装置进行连接。
37.图2示出本发明优选实施例所述的基于划分时间片的加载系统100,所述加载系统100具体应用于安卓系统的移动终端上;其包括有划分单元10、存储单元20以及提取绘制单元30;其中:
38.划分单元10用于根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组;即同一帧内的多量或超量控件被划分成多组控件组,每组控件组中包含至少一个控件,即同一帧内的多个控件被划分成多个部分,可以是均分也可以是非均分;所述存储单元20用于将所述控件组以预设的优先级存入消息队列中;多组所述控件组通过预先设置的优先级存入到消息队列中,即不同的控件组具有优先级高低之分,以便于后续的提取和调用;提取绘制单元30用于当系统屏幕刷新,则根据所述优先级从消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。即同一帧内的多量或超量控件被划分之后,分别绘制到与该帧连续的多帧上,从而解决安卓系统界面刷新的卡顿问题。
39.本实施例的所述存储单元20具体用于:将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。一个消息对应一个控件组,所述消息为存储入所述消息队列中的存储格式,所述消息的内容包括有对应控件组中的多个控件及其优先级等。
40.参见图3,所述提取绘制单元30包括有注册子单元301、提取子单元302 以及绘制子单元303,其中:
41.注册子单元301用于注册一系统刷新机制以对系统屏幕刷新进行监听;提取子单元302用于当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;绘制子单元303用于根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
42.所述系统刷新机制优选为安卓系统的choreographer机制(一个消息处理器,根据场同步信号来计算frame(控件),而计算frame的方式就是处理三种回调,包括事件回调、动画回调、绘制回调。),choreographer是系统刷新机制,一分钟刷新60次,即16.7ms刷新一次。将控件加载分成n组之后,将每组组装成一个消息放入队列,然后注册一个choreographer监听,choreographer会在屏幕刷新的时候回调,每次回调就先从队列取出一个消息,然后根据消息的内容执行。
43.具体的是,所述提取绘制单元30还用于将提取的所述消息发送至系统的主线程消息处理。每次加载或刷新时候,向系统choreographer注册信号,等屏幕刷新时,就取队列的数据发送post给系统handler,系统去刷新;这里系统handler 是android的主线程消息处理。
44.其他实施例中,进一步的,还包括有第一检测单元,所述第一检测单元用于检测所述消息队列中是否存在所述消息;所述注册子单元用于若存在所述消息,则注册所述系统刷新机制。每当系统刷新信号过来时都需要判断消息队列是否还有数据,如果有数据就继续注册,并取出数据发送给handler。
45.更好的是,所述存储单元20进一步包括标识子单元和第二检测单元;其中:标识子单元,用于对组装后的所述消息标识一消息id(identity document身份标识号);第二检测单元,用于检测所述消息队列中是否存在有相同的所述消息id,若存在则替换对应相同所述消息id的所述消息。存入队列里边的消息都有一个对应的消息id,存入一个消息就会处理一个消息,多个消息是处理完成一个继续下一个。当添加一个消息进入队列的时候,检查队列里边是不是有这个消息,如果存在同样的消息,就用当前要存入的消息替换已经存在的消息,让后在继续执行处理消息逻辑。如果新的刷新消息和未执行的刷新消息类型相同则进行替换,从而减少无效的刷新的次数。并且该技术还能用于安卓主线程操作业务流程堆积导致的耗时问题;该技术为同步操作,不会引起数据的错乱的情况。
46.其他实施例中,进一步的,还包括标识位设置单元和移除单元;其中:
47.所述标识位设置单元用于在系统刷新的链路上设置标志位,并根据所述标志位以判断是不是需要刷新;所述移除单元用于若不需要刷新,则将所述消息队列中的所述消息移除。该技术使用系统屏幕信号做触发操作,能和ui刷新同步,不会造成刷新不同步问题。
48.由于android刷新机制是系统自己控制的,我们处理具体刷新是在系统刷新的链路上做拦截,设置标志位,根据标志位来判断是不是需要刷新。例如:自定义viewgroup(android的ui界面都是由view和viewgroup及其派生类组合而成的。其中,view是所有ui组件的基类,而viewgroup是容纳这些组件的容器,其本身也是从view派生出来的),在viewgroup的onmeasure,onlayout, ondraw(相应的链路)中添加标志位,如果当前处理的消息是该viewgroup的 ui刷新,就在处理消息之前把viewgroup的标志位设为true,标识接受刷新。这样做到局部刷新;剩余的viewgroup就不需要刷新。不同的viewgroudp有各自的标记。
49.优选的是,所述划分单元10具体用于:根据系统每秒刷新的帧数,将同一帧内的至少两个所述控件切割成组数小于或等于所述帧数的所述控件组。上述的choreographer是系统刷新机制,一分钟刷新60次,即16.7ms刷新一次,每 16.7ms成为一帧,分未n组,每一组分别在连续的16.7ms内处理;使得一帧绘制的控件分散到连续多帧之中绘制,解决了卡顿的问题。
50.还包括有配置单元,所述配置单元用于根据所述控件的类型和/或日期以配置所述优先级;或者也可以是根据实际场景手动安排划分。
51.图1示出本发明优选实施例所述的基于划分时间片的加载方法,包括步骤如下:
52.s101:根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组。即同一帧内的多量或超量控件被划分成多组控件组,每组控件组中包含至少一个控件,即同一帧内的多个控件被划分成多个部分,可以是均分也可以是非均分。
53.s102:将所述控件组以预设的优先级存入消息队列中。多组所述控件组通过预先设置的优先级存入到消息队列中,即不同的控件组具有优先级高低之分,以便于后续的提取和调用。
54.s103:当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。即同一帧内的多量或超量控件被划分之后,分别绘制到与该帧连续的多帧上,从而解决安卓系统界面刷新的卡顿问题。
55.所述步骤s102包括:
56.将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。一个消息对应一个控件组,所述消息为存储入所述消息队列中的存储格式,所述消息的内容包括有对应控件组中的多个控件及其优先级等。
57.优选的是,所述步骤s103进一步包括:
58.注册一系统刷新机制以对系统屏幕刷新进行监听;
59.当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;
60.根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
61.所述系统刷新机制优选为安卓系统的choreographer机制(一个消息处理器,根据场同步信号来计算frame(控件),而计算frame的方式就是处理三种回调,包括事件回调、动画回调、绘制回调。),choreographer是系统刷新机制,一分钟刷新60次,即16.7ms刷新一次。将控件加载分成n组之后,将每组组装成一个消息放入队列,然后注册一个choreographer监听,choreographer会在屏幕刷新的时候回调,每次回调就先从队列取出一个消息,然后根据消息的内容执行。
62.更好的是,所述步骤s103包括:将提取的所述消息发送至系统的主线程消息处理。每次加载或刷新时候,向系统choreographer注册信号,等屏幕刷新时,就取队列的数据发送post给系统handler,系统去刷新;这里系统handler是 android的主线程消息处理。
63.进一步的,所述步骤s103之前包括:
64.检测所述消息队列中是否存在所述消息;
65.若存在所述消息,则注册所述系统刷新机制。
66.每当系统刷新信号过来时都需要判断消息队列是否还有数据,如果有数据就继续注册,并取出数据发送给handler。
67.所述步骤s102进一步包括:
68.对组装后的所述消息标识一消息id;
69.检测所述消息队列中是否存在有相同的所述消息id,若存在则替换对应相同所述消息id的所述消息。
70.存入队列里边的消息都有一个对应的消息id,存入一个消息就会处理一个消息,多个消息是处理完成一个继续下一个。当添加一个消息进入队列的时候,检查队列里边是不是有这个消息,如果存在同样的消息,就用当前要存入的消息替换已经存在的消息,让后在继续执行处理消息逻辑。如果新的刷新消息和未执行的刷新消息类型相同则进行替换,从而减少无效的刷新的次数。并且该技术还能用于安卓主线程操作业务流程堆积导致的耗时问题;该技术为同步操作,不会引起数据的错乱的情况。
71.在其他实施例中,进一步的,所述步骤s102之后包括:
72.在系统刷新的链路上设置标志位,并根据所述标志位以判断是不是需要刷新;
73.若不需要刷新,则将所述消息队列中的所述消息移除。该技术使用系统屏幕信号做触发操作,能和ui刷新同步,不会造成刷新不同步问题。
74.由于android刷新机制是系统自己控制的,我们处理具体刷新是在系统刷新的链路上做拦截,设置标志位,根据标志位来判断是不是需要刷新。例如:自定义viewgroup(android的ui界面都是由view和viewgroup及其派生类组合而成的。其中,view是所有ui组
件的基类,而viewgroup是容纳这些组件的容器,其本身也是从view派生出来的),在viewgroup的onmeasure,onlayout, ondraw(相应的链路)中添加标志位,如果当前处理的消息是该viewgroup的 ui刷新,就在处理消息之前把viewgroup的标志位设为true,标识接受刷新。这样做到局部刷新;剩余的viewgroup就不需要刷新。不同的viewgroudp有各自的标记。
75.所述步骤s101进一步包括:
76.根据系统每秒刷新的帧数,将同一帧内的至少两个所述控件切割成组数小于或等于所述帧数的所述控件组。上述的choreographer是系统刷新机制,一分钟刷新60次,即16.7ms刷新一次,每16.7ms成为一帧,分未n组,每一组分别在连续的16.7ms内处理;使得一帧绘制的控件分散到连续多帧之中绘制,解决了卡顿的问题。
77.所述步骤s102之前包括:
78.根据所述控件的类型和/或日期以配置所述优先级。
79.本发明还提供一种存储介质,用于存储如图1~图2所述基于划分时间片的加载方法的计算机程序。例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本技术的方法和/或技术方案。而调用本技术的方法的程序指令,可能被存储在固定的或可移动的存储介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输和/或被存储在根据程序指令运行的计算机设备的存储介质中。在此,根据本技术的一个实施例包括如图3所示基于划分时间片的加载系统的计算机设备,所述计算机设备优选包括用于存储计算机程序的存储介质和用于执行计算机程序的处理器,其中,当该计算机程序被该处理器执行时,触发该计算机设备执行基于前述多个实施例中的方法和/ 或技术方案。
80.需要注意的是,本技术可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本技术的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本技术的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本技术的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
81.根据本发明的方法可以作为计算机实现方法在计算机上实现、或者在专用硬件中实现、或以两者的组合的方式实现。用于根据本发明的方法的可执行代码或其部分可以存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,计算机程序产品包括存储在计算机可读介质上以便当所述程序产品在计算机上执行时执行根据本发明的方法的非临时程序代码部件。
82.在优选实施例中,计算机程序包括适合于当计算机程序在计算机上运行时执行根据本发明的方法的所有步骤的计算机程序代码部件。优选地,在计算机可读介质上体现计算机程序。
83.综上所述,本发明所述的基于划分时间片的加载方法使用分时间片加载技术,将本来需要一帧绘制的控件分散到连续多帧之中绘制,解决卡顿问题。还提供了一种基于划分时间片的加载系统、用于存储执行所述方法的计算机程序的存储介质以及实现所述方法的计算机设备。
84.当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
85.本发明还公开了a1、一种基于划分时间片的加载方法,包括:
86.根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组;
87.将所述控件组以预设的优先级存入消息队列中;
88.当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。
89.a2、根据a1所述的基于划分时间片的加载方法,所述将所述控件组以预设的优先级存入消息队列中的步骤包括:
90.将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。
91.a3、根据a2所述的基于划分时间片的加载方法,所述当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上的步骤进一步包括:
92.注册一系统刷新机制以对系统屏幕刷新进行监听;
93.当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;
94.根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
95.a4、根据a3所述的基于划分时间片的加载方法,所述当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上的步骤包括:
96.将提取的所述消息发送至系统的主线程消息处理。
97.a5、根据a3所述的基于划分时间片的加载方法,所述当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上的步骤之前包括:
98.检测所述消息队列中是否存在所述消息;
99.若存在所述消息,则注册所述系统刷新机制。
100.a6、根据a2所述的基于划分时间片的加载方法,所述将所述控件组以预设的优先级存入消息队列中的步骤进一步包括:
101.对组装后的所述消息标识一消息id;
102.检测所述消息队列中是否存在有相同的所述消息id,若存在则替换对应相同所述消息id的所述消息。
103.a7、根据a2所述的基于划分时间片的加载方法,所述将所述控件组以预设的优先级存入消息队列中步骤之后包括:
104.在系统刷新的链路上设置标志位,并根据所述标志位以判断是不是需要刷新;
105.若不需要刷新,则将所述消息队列中的所述消息移除。
106.a8、根据a1所述的基于划分时间片的加载方法,所述根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组的步骤进一步包括:
107.根据系统每秒刷新的帧数,将同一帧内的至少两个所述控件切割成组数小于或等
于所述帧数的所述控件组。
108.a9、根据a1所述的基于划分时间片的加载方法,所述将所述控件组以预设的优先级存入消息队列中的步骤之前包括:
109.根据所述控件的类型和/或日期以配置所述优先级。
110.b10、一种基于划分时间片的加载系统,包括:
111.划分单元,用于根据系统的刷新帧率将同一帧内的至少两个控件切割成至少两组控件组;
112.存储单元,用于将所述控件组以预设的优先级存入消息队列中;
113.提取绘制单元,用于当系统屏幕刷新,则根据所述优先级从所述消息队列中提取所述控件组,并将所述控件组逐一绘制在连续多帧上。
114.b11、根据b10所述的基于划分时间片的加载系统,所述存储单元具体用于:
115.将每一所述控件组组装成一个消息,并将所述消息存放入所述消息队列中。
116.b12、根据b11所述的基于划分时间片的加载系统,所述提取绘制单元包括有:
117.注册子单元,用于注册一系统刷新机制以对系统屏幕刷新进行监听;
118.提取子单元,用于当系统屏幕刷新时,所述系统刷新机制回调以从所述消息队列中提取出一所述消息;
119.绘制子单元,用于根据所述消息的内容进行功能执行以将所述控件组逐一绘制在连续多帧上。
120.b13、根据b12所述的基于划分时间片的加载系统,所述提取绘制单元还用于将提取的所述消息发送至系统的主线程消息处理。
121.b14、根据b12所述的基于划分时间片的加载系统,还包括有第一检测单元,所述第一检测单元用于检测所述消息队列中是否存在所述消息;
122.所述注册子单元用于若存在所述消息,则注册所述系统刷新机制。
123.b15、根据b11所述的基于划分时间片的加载系统,所述存储单元进一步包括:
124.标识子单元,用于对组装后的所述消息标识一消息id;
125.第二检测单元,用于检测所述消息队列中是否存在有相同的所述消息id,若存在则替换对应相同所述消息id的所述消息。
126.b16、根据b11所述的基于划分时间片的加载系统,还包括:
127.标识位设置单元,用于在系统刷新的链路上设置标志位,并根据所述标志位以判断是不是需要刷新;
128.移除单元,用于若不需要刷新,则将所述消息队列中的所述消息移除。
129.b17、根据b10所述的基于划分时间片的加载系统,所述划分单元具体用于:
130.根据系统每秒刷新的帧数,将同一帧内的至少两个所述控件切割成组数小于或等于所述帧数的所述控件组。
131.b18、根据b10所述的基于划分时间片的加载系统,还包括有:
132.配置单元,用于根据所述控件的类型和/或日期以配置所述优先级。
133.c19、一种存储介质,用于存储一种用于执行a1~a9中任意一种基于划分时间片的加载方法的计算机程序。
134.d20、一种计算机设备,包括存储介质、处理器以及存储在所述存储介质上并可在
所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现a1~a9任一项所述的基于划分时间片的加载方法。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献