CN107656759A - 一种用于用户界面的渲染方法和装置 - Google Patents
一种用于用户界面的渲染方法和装置 Download PDFInfo
- Publication number
- CN107656759A CN107656759A CN201710785147.XA CN201710785147A CN107656759A CN 107656759 A CN107656759 A CN 107656759A CN 201710785147 A CN201710785147 A CN 201710785147A CN 107656759 A CN107656759 A CN 107656759A
- Authority
- CN
- China
- Prior art keywords
- asynchronous
- views tree
- view
- result
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- User Interface Of Digital Computer (AREA)
- Navigation (AREA)
Abstract
本申请公开了一种用于用户界面的渲染方法及装置,在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。从而解决在渲染过程中占用UI线程资源及UI运行不畅的问题。
Description
技术领域
本申请涉及软件用户界面领域,具体涉及一种用于用户界面的渲染方法和装置。本申请还提供一种计算机可读介质及一种电子设备。
背景技术
Android系统是一种基于Linux平台的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。该平台由操作系统、中间件、用户界面(UserInterface,UI)和应用软件组成。
随着移动终端核心硬件的发展,核心硬件的运行速度越来越快,性能越来越高;从而为运行在移动终端上的应用程序提供了强大的支持,应用程序越来越大,应用场景越来越复杂,用户界面越来越注重画面流畅、逼真,用户体验越来越便捷。
然而,使用Android系统的用户碎片化严重,高端用户与仅使用手机基本功能的用户之间使用的硬件配置、性能等方面相去甚远。在使用同样的应用程序时,造成用户界面的画面流畅程度、用户体验等相差很远。通过软件技术手段缩小硬件差异带来的用户体验差距是行之有效的方法。
所有操作系统的应用程序的用户界面的渲染过程都是由UI线程完成的。UI线程,就是与用户界面协同工作的线程,是主线程的子线程。在Android系统中,UI线程通过渲染过程将视图(View)绘制在用户界面。渲染过程包括三个基本过程:测量、布局和绘图。复杂的渲染过程使配置较低的终端机占用大量的UI线程资源,造成UI运行不流畅。
因此,在渲染过程中减少占用UI线程资源,是解决UI运行不畅的关键。
发明内容
本申请提供一种用于用户界面的渲染方法,以解决在渲染过程中占用UI线程资源及UI运行不畅的问题。本申请还提供一种用于用户界面的渲染装置,一种计算机可读介质及一种电子设备。
本申请提供的一种用于用户界面的渲染方法,包括:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
可选的,所述通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果,包括:
异步渲染子线程执行异步视图树的测量,获得测量结果;
根据异步视图树的测量结果判断是否重新布局;
若是,则异步渲染子线程根据异步视图树的测量结果生成异步视图树的布局结果;并将布局结果传送给UI线程;
异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,将异步渲染结果传送给UI线程;
可选的,所述根据异步视图树的测量结果判断是否重新布局,包括:
判断所述异步视图树的测量结果与上一次异步视图树的测量结果是否发生变化,以决定是否重新布局。
可选的,所述异步视图树的测量结果的变化,包括异步视图树中至少一项发生变化:异步视图的宽度,异步视图的高度。
可选的,所述UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI;包括:
UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果;
UI线程接收异步渲染子线程传送的异步渲染结果,并完成UI线程的视图树中代理视图的绘制过程;
生成UI。
可选的,所述UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果,包括:
所述UI线程判断异步视图树的根节点异步视图的布局结果的位置参数是否与所述UI线程布局后生成的所述代理视图的布局结果的位置参数相同;
若否,则生成视图树中代理视图的测量结果和布局结果。
可选的,所述生成视图树中代理视图的测量结果,具体为:
所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数计算及设置视图树中代理视图的测量结果。
可选的,所述生成视图树中代理视图的布局结果,具体为:
所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数设置视图树中代理视图的布局结果的位置参数。
可选的,所述异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,包括:
异步渲染子线程根据异步视图树的布局结果执行异步视图树的绘制过程生成异步渲染结果。
可选的,所述将异步渲染结果传送给UI线程,包括:
将异步视图树的渲染结果通过保存在视图缓存区中传送给UI线程。
可选的,所述UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,包括:
UI线程将保存在所述视图缓存区中的内容添加到所述视图树中代理视图的画布中。
可选的,所述UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图,包括:
所述UI线程通过加载预设的与所述UI相对应的UI描述文件的内容建立视图树。
可选的,所述在UI新增和/或改变可视控件时,异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树,所述异步渲染子线程通过加载预设的与所述可视控件相对应的UI描述文件的内容建立异步视图树。
可选的,所述异步渲染子线程,包括以下任一项生成和销毁方式:
在包括UI的进程运行的初始化阶段生成异步渲染子线程,进程结束时销毁异步渲染子线程;
在UI新增和/或改变可视控件时由UI线程生成异步渲染子线程,在保存异步渲染结果后销毁异步渲染子线程。
此外,本申请还提供一种用于用户界面的渲染装置,其包括:
异步装载单元,用于在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
UI线程执行单元,用于通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
异步渲染单元:通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
绘制单元,UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
此外,本申请还提供一种计算机可读介质,其上存储有指令,所述指令能够被处理器加载并执行以下步骤:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
此外,本申请还提供一种电子设备,其包括:存储器,以及处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
与现有技术相比,本申请具有以下优点:
本申请提供的一种用于用户界面的渲染方法的其中一个方面,在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。从而解决在渲染过程中占用UI线程资源及UI运行不畅的问题,使得UI界面显示流畅,交互响应及时,一定程度或从根本上解决卡顿的问题。
此外,本申请的方法对开发者而言,基本可以做到很少的增加甚至零增加额外的工作。
附图说明
图1为一种用于安卓用户界面的渲染方法的实施例的流程图;
图2为异步渲染子线程根据异步视图树生成异步渲染结果的流程图;
图3为UI线程根据异步渲染结果完成视图树中代理视图的绘制过程并生成UI的流程图;
图4为现有方式UI线程生成的视图树;
图5为异步方式UI线程生成的视图树和代理视图;
图6为异步方式异步渲染子线程建立与所述新增和/或改变可视控件对应的异步视图树;
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
操作系统的应用程序的用户界面的渲染过程都是由UI线程完成的。UI线程,就是与用户界面协同工作的线程。本申请提供一种用于用户界面的渲染方法,包括:在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。也就是说,本申请的方法中,将UI线程的部分工作交由异步线程完成,从而从一定程度上解放主线程,提升界面流畅性,使得UI界面显示流畅,交互响应及时,一定程度或从根本上解决卡顿的问题。
在下面的实施例中,以安卓操作系统为例进行说明。但是,本领域技术人员应当理解,本申请所要保护的技术方案也可以适用于诸如IOS、WP等其它操作系统。
在Android系统中,UI线程通过渲染过程将视图(View)绘制在用户界面。渲染过程包括三个基本过程:测量、布局和绘图。
下面结合附图对本申请的用于安卓用户界面的渲染方法的实施例进行说明,其中,图1是一种用于安卓用户界面的渲染方法的流程图;图2为异步渲染子线程根据异步视图树生成异步渲染结果的流程图;图3为UI线程根据异步渲染结果完成视图树中代理视图的绘制过程并生成UI的流程图;图4是现有方式UI线程生成的视图树;图5为异步方式UI线程生成的视图树和代理视图;图6为异步方式异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;其中,图4、图5、图6中虚线部分代表在UI新增和/或改变可视控件时,现有方式的视图树中与所述新增和/或改变可视控件对应的视图子树,在异步方式中变化为UI线程视图树的代理视图,以及异步渲染子线程中的异步视图树。以下结合图1、图2、图3、图4、图5、图6对本申请的第一实施例提供一种用于安卓用户界面的渲染方法进行详细说明:
请参考图1,步骤S101,在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变的可视控件对应的异步视图树;
本步骤是为UI新增或改变的可视控件建立异步视图树。异步视图树的作用是将UI新增或改变可视控件所对应的视图子树由UI线程转移到异步渲染子线程中。生成异步视图树,从而将UI线程复杂的渲染过程转移到异步渲染子线程中完成,从而降低UI线程的资源占用率。
用户界面UI,即User Interface的简称,也称人机界面。是指用户和系统进行交互方法的集合,这些系统不单单指电脑程序,还包括某种特定的机器,设备,复杂的工具等。用户界面UI是由可视控件组成的。
控件,是指对数据和方法的封装。控件可以有自己的属性、方法和事件,分为可视控件和非可视控件。
可视控件,指可在窗体上放置的可视化图形元素,每个可视控件可抽象为View。在UI中,可视控件的集合,也就是View的集合,构成视图树(View tree)。View tree表示部分界面或整个界面。
每个可视控件中可存在多个可视控件,根据可视控件之间的从属关系,View tree相邻层级的View之间构成父与子的关系。View tree的最顶端的View被称为视图树的根节点(ViewRoot)。View按UI描述文件中描述的结构生成View tree。
UI描述文件,是记载UI中View的布局规范的文件。UI描述文件中每一个标签对应一个View,UI描述文件主要保存在后缀为.xml的文件中。在安卓系统的现有开发中,UI线程通过加载预设的与UI中的可视控件相对应的UI描述文件的内容建立View tree。
所述UI线程,就是与用户界面协同工作的线程,通过渲染过程将View绘制在用户界面。UI线程中,通过加载UI描述文件生成View tree。UI的渲染过程就是UI线程从根节点ViewRoot开始遍历View tree中的每个View的过程。ViewRoot对应的类ViewRootImpl通过方法performTraversals调用View的渲染过程:测量(Measure),布局(Layout)和绘制(Draw)。在现有UI渲染过程中,UI线程遍历View tree中所有View的绘制结果生成UI的渲染结果。因此,对于复杂的UI应用,占用大量的UI线程资源。
本实施例中,在UI线程之外,增加了异步渲染子线程,用于完成UI新增和/或改变可视控件的渲染过程,以降低UI线程的资源占用率。
所述在UI新增和/或改变可视控件时,异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树,所述异步渲染子线程通过加载预设的与所述可视控件相对应的UI描述文件的内容建立异步视图树。
所述异步渲染子线程(ADNodeThread),用于在异步情况下完成新增和/或改变可视控件所对应的异步视图树(ADNode tree)的渲染过程。即可在包括UI的进程运行的初始化阶段生成ADNodeThread,进程结束时销毁ADNodeThread;也可在UI新增和/或改变可视控件时由UI线程生成ADNodeThread,在保存异步渲染结果后销毁ADNodeThread。
所述ADNode tree,指工作在ADNodeThread中,对应于所述新增和/或改变的可视控件,其元素由异步视图(ADNode)构成。本实施例中,ADNodeThread建立ADNode tree的数量与UI新增和/或改变的可视控件的数量一致,也即,针对UI新增和/或改变的每一可视控件(若存在更低层级),均建立与之对应的异步视图节点,以最大限度的解放UI线程。当然,在其他实施例中,也可以只针对部分新增和/或改变的可视控件建立相应的异步视图节点,以部分改善UI线程的渲染过程。本申请对此不做限制,本领域技术人员可以根据实际情况作出相应的改变。但任何针对新增和/或改变的可视控件在异步线程中建立与之对应的异步视图树的技术方案均包含在本申请的保护范围之内。
所述异步视图(ADNode),工作在ADNodeThread中,对应于所述新增和/或改变的单个可视控件,ADNode的层级关系构成ADNode tree。异步渲染子线程通过加载预设的与所述可视控件相对应的UI描述文件的内容建立异步视图树。
所述加载,在计算机相关领域,就是把硬盘上的需要的程序或数据调到内存中的过程。因为所有软件要运行必须加载到内存,加载就是把需要的文件及信息读取到内存中去,一般在启动程序或安装程序时会有加载。本实施例中,开发者仍然可以按照现有Android开发方式开发UI,编写UI布局。无需改变UI描述文件、android标签、布局规范、开发/预览工具等。本实施例中,ADNodeThread通过类ADLayoutInflater加载UI描述文件,类ADLayoutInflater属于自创类,用来寻找指定目录中的UI描述文件,并实例化。
所述在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树。本实施例中,在UI新增和/或改变可视控件时,ADNodeThread通过类ADLayoutInflater加载UI描述文件中与所述可视控件相对应的内容生成ADNode tree。
步骤S102,通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
本步骤用于生成挂载代理视图的视图树。挂载在视图树中的代理视图,作为异步视图树在视图树中的代理,反映异步视图树的测量、布局和绘制的渲染结果。
在UI新增和/或改变可视控件时,通过UI线程建立新的与UI相对应的视图树,并通过异步渲染子线程建立与所述新增或改变的可视控件对应的异步视图树。所述View tree挂载有继承所述异步视图树的渲染结果的代理视图。本实施例中,当UI出现新增和/或改变可视控件时,UI线程建立新的与UI相对应的View tree。该View tree与现有开发方式不同的是:在现有方式的View tree挂载新增和/或改变的可视控件的视图子树的位置,由代理视图(AsyncView)挂载。代理视图AsyncView的实质是View的子类,用于反映异步视图树的渲染过程产生的结果。
本实施例中,所述UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图,具体为所述UI线程通过加载预设的与所述UI相对应的UI描述文件的内容建立视图树。在UI新增和/或改变可视控件时,UI线程通过类LayoutInflater加载预设的与所述UI相对应的UI描述文件的内容,建立View tree,Viewtree包括建立了一个与可视控件相对应的代理视图AsyncView。代理视图AsyncView作为异步视图树的代理,以View的形式挂载在View tree上。
步骤S103,通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
本步骤的目的是生成异步渲染结果。为了减少UI线程的负担,对UI新增和/或改变可视控件的渲染过程由异步渲染子线程完成。
本实施例中,所述通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果,具体包括:
请参考图2,步骤S103-1异步渲染子线程执行异步视图树的测量,获得测量结果;
渲染过程的测量,是通过遍历的方式,访问视图树的每一个视图,测量视图的大小,是渲染过程的布局的基础。
本实施例中,通过遍历ADNode tree中的每一个ADNode的方式,测量ADNode的大小。测量过程中通过MeasureSpec决定测量结果。MeasureSpec封装了父类传递给子类的测量要求,每个MeasureSpec代表宽度或者高度的要求以及大小。是父类ADNode提供给子类ADNode的一个参数,作为设定ADNode大小参考。通过类setMeasuredDimension可以设定ADNode的大小。
步骤S103-2根据异步视图树的测量结果判断是否重新布局。
本步骤用于根据异步视图树的测量结果判断是否重新布局。所述根据异步视图树的测量结果判断是否重新布局,具体包括:判断所述异步视图树的测量结果与上一次异步视图树的测量结果是否发生变化,以决定是否重新布局。本实施例中,即可在包括UI的进程运行的初始化阶段生成ADNodeThread,进程结束时销毁ADNodeThread;也可在UI新增和/或改变可视控件时由UI线程生成ADNodeThread,在保存异步渲染结果后销毁ADNodeThread。
在UI新增可视控件时,ADNodeThread建立新的与新增可视控件相对应的ADNodetree,同时,还建立与ADNode tree的每个ADNode相对应的用于保存上一次测量结果的变量和用于保存本次测量结果的变量。建立变量后,对变量赋初始值。获得本次异步视图树的测量结果后,遍历ADNode tree的每个ADNode,将保存本次异步视图树的测量结果的变量与保存上一次异步视图树的测量结果的变量的初始值比较,判断是否发生变化。
在UI改变可视控件时,ADNodeThread使用新增可视控件时建立的ADNode tree,以及与ADNode tree的每个ADNode相对应的用于保存上一次测量结果的变量和用于保存本次测量结果的变量。获得本次异步视图树的测量结果后,遍历ADNode tree的每个ADNode,将保存本次异步视图树的测量结果的变量与保存上一次异步视图树的测量结果的变量比较,判断是否发生变化。
其中,所述异步视图树的测量结果的变化,包括异步视图树中至少一项发生变化:异步视图的宽度,异步视图的高度。
本实施例中,ADNode的测量结果包括measuredWidth和measuredHeight两个变量值,这两个变量分别代表ADNode的宽度和高度。
ADNodeThread遍历ADNode tree中的每一个ADNode,判断measuredWidth、measuredHeight两个变量值是否与保存上一次ADNode的测量结果的变量值相同,由此作为ADNode是否需要重新布局的依据。
所述根据异步视图树的测量结果判断是否重新布局。就是ADNodeThread遍历ADNode tree中的每一个ADNode,通过ADNode的类MeasureSpec获得measuredWidth、measuredHeight两个本次测量的变量值。将两个变量值与保存上一次ADNode的测量结果的变量值比较,是否包括至少一项发生变化:ADNode tree中ADNode的宽度measuredWidth,异步视图的高度measuredHeight。
步骤S103-3若是,则异步渲染子线程根据异步视图树的测量结果生成异步视图树的布局结果;并将布局结果传送给UI线程。
本步骤用于在步骤S103-2中的逻辑判断结果为“是”的情况下,生成异步视图树的布局结果;逻辑判断结果为“否”的情况下,则进入下一个步骤。
渲染过程的布局,即为父视图按照子视图的大小及布局参数将子视图放在窗口的合适的位置上。左、上、右、下等四个坐标参数代表子视图在父视图中的位置,也就是布局结果,是渲染过程的绘制的基础。
本实施例中,所述若是,则异步渲染子线程根据异步视图树的测量结果生成异步视图树的布局结果;并将布局结果传送给UI线程。如果步骤S103-2的判断结果是需要重新布局,ADNodeThread遍历ADNode tree中ADNode,通过异步视图的宽度measuredWidth和异步视图的高度measuredHeight,计算出每个ADNode在父视图中左、上、右、下等四个坐标参数的位置。左、上、右、下等四个坐标参数代表子视图在父视图中的位置,也就是布局结果。并将布局结果传送给UI线程。
步骤S103-4异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,将异步渲染结果传送给UI线程。
所述异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,包括:异步渲染子线程根据异步视图树的布局结果执行异步视图树的绘制过程生成异步渲染结果。
渲染过程的绘制,决定UI的结果,该显示什么由绘制流程完成。异步渲染子线程的渲染过程的绘制,生成异步视图树中异步视图的异步绘制结果,将异步视图树中异步视图的异步绘制结果集成,生成异步渲染结果。
本实施例中,所述将异步渲染结果传送给UI线程,具体而言包括:将异步视图树的渲染结果保存在视图缓存区中传送给UI线程。本实施例中,所述视图缓存区,是ADNodeThread保存ADNode tree的渲染结果的内存区域。通过视图缓存区将ADNode tree的渲染结果传送给UI线程。
本实施例中,生成ADNode tree的渲染结果后,ADNodeThread触发UI线程的视图树中代理视图的绘制过程,即ADNodeThread触发代理视图AsyncView的invalidate方法,使代理视图AsyncView执行重新绘制过程。
所述UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,包括:UI线程将保存在所述视图缓存区中的内容添加到所述视图树中代理视图的画布中。本实施例中,UI线程接收到ADNodeThread发出的invalidate方法指令,将所述视图缓存区中的内容添加到代理视图AsyncView的画布Canvas中。
请继续参考图1,步骤S104,UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
由于UI最终还是要由UI线程完成,所以,必须将异步渲染子线程生成的结果定义视图树的代理视图,并最终由UI线程完成UI的渲染过程。
所述UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。包括:
请参考图3,步骤S104-1,UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果。
所述UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果,包括:所述UI线程判断异步视图树的根节点异步视图的布局结果的位置参数是否与所述UI线程布局后生成的所述代理视图的布局结果的位置参数相同;若否,则生成视图树中代理视图的测量结果和布局结果。若是,则进入下一个步骤。
本实施例中,所述ADNode tree的根节点异步视图ADRootNode的布局结果,决定View tree中代理视图AsyncView的布局结果。
所述布局结果的位置参数,是指左、上、右、下等四个坐标参数代表子视图在父视图中的位置。
所述UI线程判断异步视图树的根节点异步视图的布局结果的位置参数是否与所述UI线程布局后生成的所述代理视图的布局结果的位置参数相同。就是判断UI线程判断异步视图树的根节点异步视图的布局结果的四个坐标参数与所述UI线程布局后生成的所述代理视图的布局结果的四个坐标参数是否相同。
如果判断结果是不相同,则生成视图树中代理视图的测量结果和布局结果。本实施例中,UI线程指令View tree中代理视图AsyncView执行requestLayout方法,requestLayout方法导致调用测量过程和布局过程。
所述生成视图树中代理视图的测量结果,具体为:所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数计算及设置视图树中代理视图的测量结果。本实施例中,就是通过ADNode tree的根节点异步视图ADRootNode的布局结果的左、上、右、下等四个坐标参数计算出View tree中代理视图AsyncView的高和宽,并通过类setMeasuredDimension设定代理视图AsyncView的大小。
所述生成视图树中代理视图的布局结果,具体为:所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数设置视图树中代理视图的布局结果的位置参数。
步骤S104-2,UI线程接收异步渲染子线程传送的异步渲染结果,并完成UI线程的视图树中代理视图的绘制过程。
所述UI线程接收异步渲染子线程传送的异步渲染结果,并完成UI线程的视图树中代理视图的绘制过程。UI线程接收异步渲染子线程通过视图缓冲区传送的异步渲染结果,并执行异步渲染子线程发出的触发代理视图绘制的指令。本实施例中,UI线程接收ADNodeThread通过视图缓冲区传送的异步渲染结果。同时,UI线程执行ADNodeThread触发的代理视图AsyncView的invalidate方法,invalidate方法可使代理视图AsyncView完成绘制过程,将所述视图缓存区中的内容添加到代理视图AsyncView的画布Canvas中。
步骤S104-3,生成UI。
系统根据View tree中View的绘制结果生成UI。
本申请的那个数实施例提供一种用于安卓用户界面的渲染方法采用异步渲染方法完成用户界面的渲染。通过异步渲染的方法,可减少占用UI线程资源,解决UI运行不畅的问题。此外,使开发者仍然可按照原先Android开发方式开发UI,编写UI布局。不用改变UI描述文件、android标签、布局规范、开发/预览工具等。
与本申请提供的第一种用于安卓用户界面的渲染方法相对应,本申请还提供一种用于安卓用户界面的渲染装置。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明即可。下述描述的装置实施例仅仅是示意性的。
本申请提供一种用于安卓用户界面的渲染装置,包括:
异步装载单元,用于在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
UI线程执行单元,用于通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
异步渲染单元:通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
绘制单元,UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
本申请提供的一种计算机可读介质实施例如下:
本申请还提供了一种用于安卓用户界面的渲染的计算机可读介质。
本申请提供的所述计算机可读介质实施例描述得比较简单,相关的部分请参见上述提供的所述用于安卓用户界面的渲染方法实施例的对应说明即可。下述描述的实施例仅仅是示意性的。
本申请提供一种计算机可读介质,包括:存储有指令,所述指令能够被处理器加载并执行以下步骤:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
本申请提供的一种电子设备实施例如下:
本申请还提供了一种用于安卓用户界面的渲染的电子设备。
本申请提供的所述电子设备实施例描述得比较简单,相关的部分请参见上述提供的所述用于安卓用户界面的渲染方法实施例的对应说明即可。下述描述的实施例仅仅是示意性的。
本申请提供一种电子设备,包括:存储器,以及处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (10)
1.一种用于用户界面的渲染方法,其特征在于,包括:
在UI新增和/或改变可视控件时,通过异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树;
通过UI线程生成视图树,并在所述视图树相对应的可视控件所在节点挂载所述异步视图树的代理视图;
通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果;
UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI。
2.根据权利要求1所述的安卓用户界面的渲染方法,其特征在于,所述通过所述异步渲染子线程并根据所述异步视图树生成异步渲染结果,包括:
异步渲染子线程执行异步视图树的测量,获得测量结果;
根据异步视图树的测量结果判断是否重新布局;
若是,则异步渲染子线程根据异步视图树的测量结果生成异步视图树的布局结果;并将布局结果传送给UI线程;
异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,将异步渲染结果传送给UI线程。
3.根据权利要求2所述的用于用户界面的渲染方法,其特征在于,所述根据异步视图树的测量结果判断是否重新布局,包括:
判断所述异步视图树的测量结果与上一次异步视图树的测量结果是否发生变化,以决定是否重新布局。
4.根据权利要求3所述的用于用户界面的渲染方法,其特征在于,所述异步视图树的测量结果的变化,包括异步视图树中至少一项发生变化:异步视图的宽度,异步视图的高度。
5.根据权利要求2所述的用于用户界面的渲染方法,其特征在于,所述UI线程根据异步渲染结果完成视图树中代理视图的绘制过程,并生成UI;包括:
UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果;
UI线程接收异步渲染子线程传送的异步渲染结果,并完成UI线程的视图树中代理视图的绘制过程;
生成UI。
6.根据权利要求5所述的用于用户界面的渲染方法,其特征在于,所述UI线程根据异步视图树的布局结果获得视图树中代理视图的测量结果和布局结果,包括:
所述UI线程判断异步视图树的根节点异步视图的布局结果的位置参数是否与所述UI线程布局后生成的所述代理视图的布局结果的位置参数相同;
若否,则生成视图树中代理视图的测量结果和布局结果。
7.根据权利要求6所述的用于用户界面的渲染方法,其特征在于,所述生成视图树中代理视图的测量结果,具体为:
所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数计算及设置视图树中代理视图的测量结果。
8.根据权利要求6所述的用于用户界面的渲染方法,其特征在于,所述生成视图树中代理视图的布局结果,具体为:
所述UI线程获得异步视图树的根节点异步视图的布局结果,根据所述布局结果的位置参数设置视图树中代理视图的布局结果的位置参数。
9.根据权利要求2所述的用于用户界面的渲染方法,其特征在于,所述异步渲染子线程根据异步视图树的布局结果生成异步渲染结果,包括:
异步渲染子线程根据异步视图树的布局结果执行异步视图树的绘制过程生成异步渲染结果。
10.根据权利要求1所述的用于用户界面的渲染方法,其特征在于,所述在UI新增和/或改变可视控件时,异步渲染子线程建立与所述新增或改变可视控件对应的异步视图树,所述异步渲染子线程通过加载预设的与所述可视控件相对应的UI描述文件的内容建立异步视图树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710785147.XA CN107656759B (zh) | 2017-09-04 | 2017-09-04 | 一种用于用户界面的渲染方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710785147.XA CN107656759B (zh) | 2017-09-04 | 2017-09-04 | 一种用于用户界面的渲染方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107656759A true CN107656759A (zh) | 2018-02-02 |
CN107656759B CN107656759B (zh) | 2021-03-26 |
Family
ID=61129092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710785147.XA Active CN107656759B (zh) | 2017-09-04 | 2017-09-04 | 一种用于用户界面的渲染方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107656759B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733445A (zh) * | 2018-05-17 | 2018-11-02 | 北京五八信息技术有限公司 | 一种视图管理方法、装置、设备及计算机可读存储介质 |
CN108762881A (zh) * | 2018-06-21 | 2018-11-06 | 广州酷狗计算机科技有限公司 | 界面绘制方法、装置、终端及存储介质 |
CN108874393A (zh) * | 2018-06-06 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 渲染方法、装置、存储介质和计算机设备 |
CN108958831A (zh) * | 2018-06-12 | 2018-12-07 | 北京奇艺世纪科技有限公司 | 一种ViewGroup动态布局方法、装置及电子设备 |
CN109375918A (zh) * | 2018-11-23 | 2019-02-22 | 天津字节跳动科技有限公司 | 小程序的界面渲染方法、装置、电子设备和存储介质 |
CN109669752A (zh) * | 2018-12-19 | 2019-04-23 | 北京达佳互联信息技术有限公司 | 一种界面绘制方法、装置及移动终端 |
CN109739505A (zh) * | 2019-01-08 | 2019-05-10 | 网易(杭州)网络有限公司 | 一种用户界面的处理方法和装置 |
CN111880889A (zh) * | 2020-08-11 | 2020-11-03 | 成都极米科技股份有限公司 | 界面显示方法、装置、电子设备及存储介质 |
CN108958954B (zh) * | 2018-07-05 | 2021-05-25 | 北京微播视界科技有限公司 | 模块间的消息传递方法、装置、电子设备和计算机可读介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140137034A1 (en) * | 2011-06-01 | 2014-05-15 | Microsoft Corporation | Asynchronous handling of a user interface manipulation |
CN105446755A (zh) * | 2014-08-06 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种用于Android系统上快速加载Activity数据的方法和装置 |
CN106775699A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 在异步线程中更新ui的方法 |
-
2017
- 2017-09-04 CN CN201710785147.XA patent/CN107656759B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140137034A1 (en) * | 2011-06-01 | 2014-05-15 | Microsoft Corporation | Asynchronous handling of a user interface manipulation |
CN105446755A (zh) * | 2014-08-06 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种用于Android系统上快速加载Activity数据的方法和装置 |
CN106775699A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 在异步线程中更新ui的方法 |
Non-Patent Citations (3)
Title |
---|
AMALCHANDRAN: "LazyLayoutInflatorActivity", 《HTTPS://GITHUB.COM/AMALCHANDRAN/ASYNCLAYOUTINFLATOR/BLOB/MASTER/APP/SRC/MAIN/JAVA/COM/AMALBIT/ASYNCLAYOUT/LAZYLAYOUTINFLATORACTIVITY.JAVA》 * |
THEONE10211024: "AsyncLayoutInflater的简单介绍和源码分析", 《HTTPS://BLOG.CSDN.NET/THEONE10211024/ARTICLE/DETAILS/52781079》 * |
天涯海角路: "自定义View:测量measure,布局layout,绘制draw", 《HTTPS://WWW.CNBLOGS.COM/AADEMENG/ARTICLES/6538930.HTML》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733445A (zh) * | 2018-05-17 | 2018-11-02 | 北京五八信息技术有限公司 | 一种视图管理方法、装置、设备及计算机可读存储介质 |
CN108874393A (zh) * | 2018-06-06 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 渲染方法、装置、存储介质和计算机设备 |
CN108874393B (zh) * | 2018-06-06 | 2021-07-02 | 腾讯科技(深圳)有限公司 | 渲染方法、装置、存储介质和计算机设备 |
CN108958831A (zh) * | 2018-06-12 | 2018-12-07 | 北京奇艺世纪科技有限公司 | 一种ViewGroup动态布局方法、装置及电子设备 |
CN108762881B (zh) * | 2018-06-21 | 2021-02-12 | 广州酷狗计算机科技有限公司 | 界面绘制方法、装置、终端及存储介质 |
CN108762881A (zh) * | 2018-06-21 | 2018-11-06 | 广州酷狗计算机科技有限公司 | 界面绘制方法、装置、终端及存储介质 |
CN108958954B (zh) * | 2018-07-05 | 2021-05-25 | 北京微播视界科技有限公司 | 模块间的消息传递方法、装置、电子设备和计算机可读介质 |
CN109375918A (zh) * | 2018-11-23 | 2019-02-22 | 天津字节跳动科技有限公司 | 小程序的界面渲染方法、装置、电子设备和存储介质 |
CN109669752A (zh) * | 2018-12-19 | 2019-04-23 | 北京达佳互联信息技术有限公司 | 一种界面绘制方法、装置及移动终端 |
CN109739505A (zh) * | 2019-01-08 | 2019-05-10 | 网易(杭州)网络有限公司 | 一种用户界面的处理方法和装置 |
US11890540B2 (en) | 2019-01-08 | 2024-02-06 | Netease (Hangzhou) Network Co., Ltd. | User interface processing method and device |
CN111880889A (zh) * | 2020-08-11 | 2020-11-03 | 成都极米科技股份有限公司 | 界面显示方法、装置、电子设备及存储介质 |
CN111880889B (zh) * | 2020-08-11 | 2023-08-08 | 成都极米科技股份有限公司 | 界面显示方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107656759B (zh) | 2021-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107656759A (zh) | 一种用于用户界面的渲染方法和装置 | |
US20190080017A1 (en) | Method, system, and device that invokes a web engine | |
US11706331B2 (en) | Information processing method and apparatus, storage medium, and electronic device | |
US11797273B2 (en) | System and method for enhancing component based development models with auto-wiring | |
EP3435225B1 (en) | Mixed view display method and device | |
CN108156022A (zh) | 一种服务调用方法、装置及电子设备 | |
CN108958796A (zh) | 业务请求处理方法及装置、业务请求处理系统 | |
AU2013390782B9 (en) | Restricted driver platform runs drivers in sandbox in user mode | |
CN105577813B (zh) | 一种web混合应用的更新方法和系统 | |
CN107885540A (zh) | 一种加载应用程序静态资源的方法、装置及终端 | |
US10592312B2 (en) | Message oriented middleware with integrated rules engine | |
CN112214210A (zh) | 后勤业务规则引擎及其配置方法、装置、设备和存储介质 | |
CN104423961A (zh) | 一种生成测试脚本的方法及系统 | |
CN106997298A (zh) | 一种应用资源获取方法及装置 | |
WO2017107851A1 (zh) | 一种桌面应用组件发布、更新方法及装置 | |
CN106874028A (zh) | 应用部署方法和装置 | |
CN109460546A (zh) | 表单生成方法、装置及电子设备 | |
CN113986424A (zh) | 一种页面显示方法及装置 | |
CN113076099A (zh) | 一种页面生成方法、装置、设备以及计算机存储介质 | |
KR20140021091A (ko) | 하이브리드 웹 어플리케이션의 네이티브 기능을 수행하는 자바스크립트 코드의 동적 로딩 장치와 방법 | |
AU2016378425B2 (en) | Application program running method and apparatus | |
CN106648567B (zh) | 数据获取方法及装置 | |
CN117762407A (zh) | 页面渲染方法、装置、设备、存储介质及计算机程序产品 | |
CN108762753A (zh) | 页面组件修改方法及设备 | |
CN116610397A (zh) | 一种动态新增图元的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |