图形用户界面重绘方法、终端设备及计算机可读存储介质与流程

文档序号:15462214发布日期:2018-09-18 18:26阅读:217来源:国知局

本发明涉及图形用户界面(Graphical User Interface,GUI)技术领域,尤其涉及一种图形用户界面重绘方法、终端设备及计算机可读存储介质。



背景技术:

目前,作为市面上主流的移动操作系统,Android使用GUI技术为用户呈现了内容丰富多彩的交互界面。GUI一般都采用View hierarchy形式来对各种UI元素进行组织。其中,每一个基本的UI元素以View的形式存在,多个View可以包含在同一个View Group中,而由此组合而成的View Group将会继续与其他View甚至是View Group进行组合,最终生成View Tree。每个View Tree只有一个根节点View Root。

当UI界面上某个元素的内容发生了更新,该元素所属View将通过invalidate指令的形式通知上层View Group当前是哪个View的内容发生了更新以及更新内容在界面上所在的区域(即脏区域,Dirty region)。该View Group结合本身的显示区域及变换矩阵对该脏区域进行相应处理后,会继续向上一层的View Group传递该invalidate指令,直至最终传递到View Root。View Root在收到invalidate指令后,将在下一个VSYNC(Vertical Synchronization垂直同步)信号到来时对View Tree进行重绘。

然而,这种View Tree的invalidate指令传导技术存在一个问题:当属于同一个View Group的多个View在下一个VSYNC信号到来之前都存在内容更新时,将对整个View Tree进行重复多次的invalidate指令传递过程,从而降低了GUI绘制的效率。



技术实现要素:

本发明的主要目的在于提出一种图形用户界面重绘方法、终端设备及计算机可读存储介质,旨在解决如何避免传统方式中invalidate指令重复传递的问题。

为实现上述目的,本发明提供的一种图形用户界面重绘方法,该方法包括步骤:

当所述图形用户界面中一个View有内容更新时,将对应的invalidate数据上传至一个HashMap;

判断所述View所属View Group在所述HashMap中是否已保存有invalidate数据;

当已保存有invalidate数据时,合并所述上传的invalidate数据和已保存的invalidate数据,并保存至所述HashMap;

向UI线程发送一个延迟执行invalidate指令的消息;

当达到所述消息的延时时间间隔后,从所述HashMap中读取所有invalidate数据并清空所述HashMap;及

根据所读取的invalidate数据执行invalidate指令。

可选地,所述方法还包括步骤:

当所述View所属View Group在所述HashMap中还未保存invalidate数据时,将所述上传的invalidate数据直接保存至所述HashMap中。

可选地,所述invalidate数据包括所述View所属View Group的引用和脏区域信息。

可选地,所述HashMap以View Group的引用作为主键。

可选地,所述延时时间间隔小于VSYNC信号的时间间隔。

此外,为实现上述目的,本发明还提出一种终端设备,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的图形用户界面重绘程序,所述图形用户界面重绘程序被所述处理器执行时实现如下步骤:

当所述图形用户界面中一个View有内容更新时,将对应的invalidate数据上传至一个HashMap;

判断所述View所属View Group在所述HashMap中是否已保存有invalidate数据;

当已保存有invalidate数据时,合并所述上传的invalidate数据和已保存的invalidate数据,并保存至所述HashMap;

向UI线程发送一个延迟执行invalidate指令的消息;

当达到所述消息的延时时间间隔后,从所述HashMap中读取所有invalidate数据并清空所述HashMap;及

根据所读取的invalidate数据执行invalidate指令。

可选地,当所述View所属View Group在所述HashMap中还未保存invalidate数据时,将所述上传的invalidate数据直接保存至所述HashMap中。

可选地,所述invalidate数据包括所述View所属View Group的引用和脏区域信息。

可选地,所述延时时间间隔小于VSYNC信号的时间间隔。

进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有图形用户界面重绘程序,所述图形用户界面重绘程序被处理器执行时实现如上述的图形用户界面重绘方法的步骤。

本发明提出的图形用户界面重绘方法、终端设备及计算机可读存储介质,能够通过对Android系统GUI中在同一个VSYNC绘制周期内属于同一个View Group下的多个View的invalidate数据进行合并,减少UI界面内容更新时对整体View Tree的遍历次数,从而提高整个GUI的绘制效率。

附图说明

图1为本发明第一实施例提出的一种终端设备的架构图;

图2为本发明第二实施例提出的一种图形用户界面重绘方法的流程图;

图3为本发明中所述图形用户界面的View Tree的一实施例的示意图;

图4为图3中步骤S104的一具体实施例的示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例一

参阅图1所示,本发明第一实施例提出一种终端设备2。所述终端设备2可以是任何具有图形用户界面的电子设备,例如手机等。所述终端设备2包括存储器20、处理器22和图形用户界面重绘程序28。

其中,所述存储器20至少包括一种类型的可读存储介质,用于存储安装于所述终端设备2的操作系统和各类应用软件,例如图形用户界面重绘程序28的程序代码等。此外,所述存储器20还可以用于暂时地存储已经输出或者将要输出的各类数据。

所述处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制所述终端设备2的总体操作。本实施例中,所述处理器22用于运行所述存储器20中存储的程序代码或者处理数据,例如运行所述图形用户界面重绘程序28等。

所述图形用户界面重绘程序28被所述处理器22执行时,实现如下步骤:

(1)当所述图形用户界面的一个View有内容更新时,将对应的invalidate数据上传至HashMap。

(2)判断该View所属View Group在所述HashMap中是否已保存有invalidate数据。

(3)当已保存有invalidate数据时,合并所述上传的invalidate数据和已保存的invalidate数据,并保存至所述HashMap。

(4)当还未保存invalidate数据时,将所述上传的invalidate数据保存至所述HashMap中。

(5)向UI线程发送一个延迟执行invalidate指令的消息。

(6)当达到所述消息的延时时间间隔后,从所述HashMap中读取所有invalidate数据并清空所述HashMap。

(7)根据所读取的invalidate数据执行invalidate指令。

上述步骤的详细说明请参阅下述第二实施例,在此不再赘述。

本领域技术人员可以理解,图1中示出的结构并不构成对所述终端设备2的限定,所述终端设备2还可以包括其他必要部件,或者组合某些部件,或者不同的部件布置。

实施例二

参阅图2所示,本发明第二实施例提出一种图形用户界面重绘方法,应用于所述终端设备2中。在本实施例中,根据不同的需求,图2所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。该方法包括以下步骤:

S100,当一个View有内容更新时,将对应的invalidate数据上传至HashMap。

具体地,所述invalidate数据包括该View所属View Group的引用和脏区域(Dirty region)信息。为了避免传统方式中invalidate指令重复传递的过程,本实施例在View内容需要更新时,并不直接向所属的View Group传递invalidate指令,而是将一个包含该View所属View Group的引用和更新内容所属脏区域的数据结构(即所述invalidate数据)保存到一个HashMap中,该HashMap以View Group的引用作为主键Key。

参阅图3所示,为所述图形用户界面的View Tree的一实施例的示意图。其中,每一个基本的UI元素以View的形式存在,多个View可以包含在同一个View Group中,而由此组合而成的View Group将会继续与其他View甚至是View Group进行组合,最终生成View Tree。所述View Tree只有一个根节点View Root。当所述View Tree中某一个View的内容需要更新时,将该View所属View Group的引用和脏区域信息上传至所述HashMap。

S102,判断该View所属View Group在所述HashMap中是否已保存有invalidate数据。若是,则执行步骤S104。若否,则执行步骤S106。

具体地,在保存所述上传的invalidate数据之前,首先以View Group的引用作为Key检查所述HashMap中是否已保存有invalidate数据。若发现所述HashMap中同一个Key下已经保存有invalidate数据,则说明对应同一个ViewGroup所包含的View中,已经有其他View发起了invalidate过程并等待执行。

S104,合并所述上传的invalidate数据和已保存的invalidate数据,并保存至所述HashMap。

具体地,当该View所属View Group在所述HashMap中已保存有invalidate数据时,需要将属于同一个View Group的多个view的invalidate数据进行合并(具体主要是对脏区域进行合并),并使用合并后的数据结构替换之前所述HashMap中同一个Key对应的数据结构。

例如,参阅图4所示,假设所述View Tree中的View A有内容需要更新,上传包含所属的View Group A和对应脏区域Dirty Region A的invalidate数据至所述HashMap。此时所述HashMap中已保存有View Group A下的View B之前上传的invalidate数据(包含所属的View Group A和对应脏区域Dirty Region B),则需要将View Group A下的上述两个invalidate数据进行合并,得到包含所属的View Group A和对应脏区域Dirty Region C(A与B合并)的新的invalidate数据,并替换所述View B之前上传的invalidate数据,保存至所述HashMap中。

S106,将所述上传的invalidate数据保存至所述HashMap中。

具体地,当该View所属View Group在所述HashMap中还未保存invalidate数据时,表示该View所属View Group中还没有其他View发起invalidate过程,则仅需直接将该View上传的invalidate数据保存至所述HashMap中即可。

S108,向UI线程发送一个延迟执行invalidate指令的消息。

具体地,在完成保存动作后,再向UI线程发送一个带有延时时间间隔的延迟执行invalidate指令的消息(Delayed Invalidate Message)。由于所述Delayed Invalidate Message从发送到接收并执行有一个延时过程,因此在该延时时间间隔中如果有多个view都发起了invalidate过程,并且其中一些view属于同一个View Group,则对应同一个View Group的invalidate数据将被合并。

值得注意的是,所述延时时间间隔需要小于VSYNC信号的时间间隔,也就是GUI每帧的刷新周期(例如60秒)。

S110,当达到所述延时时间间隔后,从所述HashMap中读取所有invalidate数据并清空所述HashMap。

具体地,在达到所述Delayed Invalidate Message的延时时间间隔后,UI线程从所述HashMap中读取出其中保存的所有invalidate数据,并对已读取的invalidate数据进行清空。从数据中保存的View Group开始,完成剩余的invalidate过程。

S112,根据所读取的invalidate数据执行invalidate指令。

具体地,针对从所述HashMap中读取的每个invalidate数据,从对应的View Group开始完成剩余的invalidate过程,即对所述invalidate数据对应的每个View Group执行相应的invalidate指令(使用合并后的脏区域)。

本实施例所提出的图形用户界面重绘方法,可以通过对在同一个VSYNC绘制周期内属于同一个View Group下的多个View的invalidate数据进行合并,减少UI界面内容更新时对整体View Tree的遍历次数,从而提高整个GUI的绘制效率。

实施例三

本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有图形用户界面重绘程序,所述图形用户界面重绘程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的图形用户界面重绘方法的步骤。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

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