CN107589962A - 一种用户界面显示方法和装置 - Google Patents
一种用户界面显示方法和装置 Download PDFInfo
- Publication number
- CN107589962A CN107589962A CN201610561603.8A CN201610561603A CN107589962A CN 107589962 A CN107589962 A CN 107589962A CN 201610561603 A CN201610561603 A CN 201610561603A CN 107589962 A CN107589962 A CN 107589962A
- Authority
- CN
- China
- Prior art keywords
- user interface
- text composition
- thread
- main thread
- worker thread
- 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.)
- Pending
Links
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
本发明提供了一种用户界面显示方法和装置。所述用户界面显示方法包括:接收显示用户界面的指令;在主线程里对用户界面进行测量和布局,其中在发生文字排版事件时创建一个工作线程,在该工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程,在主线程里根据得到的各种数据参数进行绘制以显示用户界面。
Description
技术领域
本发明涉及信息技术领域,更具体而言,涉及一种用户界面显示方法和装置。
背景技术
用户界面(UI)的设计是程序开发中最为重要的一个组成部分,尤其是随着智能终端的普及,无论是Android系统还是ios系统,用户在使用智能终端时可以通过触摸屏来完成操控。即便使用例如台式计算机,通过例如键盘或鼠标等输入设备来完成操控,但是很多操控也是通过操控用户界面上的功能按钮来实现。
具体的,用户使用智能终端例如智能手机的显示屏来展示新闻、视频、聊天消息等内容信息,而智能终端中安装的各类应用多数需要通过页面显示来完成与用户的交互。以浏览器为例,当前流行的浏览器能提供大量应用,每一个应用都有自己的主界面,用户通过点击各种应用界面来实现各种功能,如浏览新闻、阅读小说、网上购物、APP应用程序下载等;再如各种聊天工具,例如钉钉,需要在终端的显示屏上展示聊天页面,以使得用户能够通过该用户界面实现信息的输入与查看。
下面以安卓Android操作系统为例,简单说明用户界面(UI)的绘制过程。当Android系统中的某一应用程序启动时,Android系统会为该应用程序创建一个单独的线程,该线程叫做主线程,这个主线程主要处理与UI组件相关的事件,例如UI界面的显示、更新和控件交互,所以又叫UI线程。由于Android UI组件并不是线程安全的,所以对于Android UI组件的操作必须在主线程中进行,这种模型叫做Android UI单线程模型,用户界面更新也只能在主线程(UI线程)完成。而上述的UI设计中的UI显示是一个对UI组件构建、测量、布局和绘制的过程,尤其是UI显示的更新,会导致对UI整体加载过慢。另外,智能终端在页面绘制过程中可能由于主线程的任务量较多而发生卡顿现象。设计者试图将一些任务分配给工作线程完成,以减少主线程的任务量,但是对于UI显示,由于Android UI组件不是线程安全的,且开发Android应用时必须遵守单线程模型的原则,所以当试图使用工作线程来更新用户界面,就会出现一个类型为CalledFromWrongThreadException的异常情况。
发明内容
本发明的目的在于提供一种用户界面显示方法和装置,以改善上述的问题。
本发明的第一方面提供了一种用户界面显示方法,其包括:
接收显示用户界面的指令;
在主线程里对用户界面进行测量和布局,其中在发生文字排版事件时创建一个工作线程,在该工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程;
在主线程里根据得到的各种数据参数进行绘制以显示用户界面。
其中,所述文字排版工具不在Android UI工具包的范围内。
其中,所述文字排版工具是StaticLayout。
其中,使用handler机制将工作线程发送的数据传递给主线程。
本发明的第二方面提供了一种用户界面显示装置,其包括:
接收模块,用于接收显示用户界面的指令;
界面测量和布局模块,用于在主线程里对用户界面进行测量和布局;
工作线程创建模块,用于在发生文字排版事件时创建一个工作线程;
文字排版模块,用于在所创建的工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程;
界面绘制模块,用于在主线程里根据得到的各种数据参数进行绘制以使得在屏幕上显示用户界面。
其中,所述文字排版工具不在Android UI工具包的范围内。
其中,所述文字排版工具是StaticLayout。
其中,还包括:数据传递模块,用于使用handler机制将工作线程发送的数据传递给主线程。
本发明实施例提供的用户界面显示方法和装置,其能够将文字排版的操作从主线程移到工作线程上而不会发生异常情况,减少了主线程非绘制行为的占用时间,使得TextView在显示的时候无需在主线程进行过多的文字排版行为,减少了排版时间,提升了绘制性能,改善了多文字展示时的动画卡顿问题。
附图说明
图1是本发明提供的用户界面显示方法的流程图;
图2是本发明提供的用户界面显示装置的框图。
具体实施方式
下面将结合本发明实施例和附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面将结合本发明的附图和具体实施例,对本发明的技术方案进行清楚、完整地描述。
一般来说,Android系统下的用户界面显示的绘制流程遵循测量(measure)->布局(layout)->绘制(draw)的逻辑。在对绘制流程进行耗时测试时发现,创建排版信息和排版花费时间较长。而TextView组件常用于对文本进行排版,计算不同文字大小、文字间距、换行等,尤其是中文。对于浏览器这类的显示大量文字内容的应用程序来说,由于对文字的排版发生在主线程,这样在主线程上耗费很多时间用于文字排版,会引起绘制的流程阻塞,最终发生掉帧。
在分析了上面的测试结果之后,发明人提出一个新思路:建立一个工作线程,让普通纯文字的排版在工作线程来完成,而且还遵守单线程模型的原则:1.不阻塞UI线程;2.不在UI线程之外访问Android UI工具包。
为此,本发明提供了一种用户界面显示方法。图1是本发明提供的用户界面显示方法的流程图,如图所示,该用户界面显示方法包括:
步骤S101:接收显示用户界面的指令。
在本发明实施例中,所述用户界面(UI)可以是智能终端上安装的应用程序的一个用户界面,如钉钉应用程序的聊天窗口界面,浏览器的一个应用板块界面,例如新闻界面,等等。
当接收到用户点击某个用户界面的入口标识时,即为接收显示该用户界面的指令。
以智能手机中安装的钉钉应用为例来举例说明,当用户点击屏幕上的钉钉应用的应用图标时,智能手机会接收到显示与钉钉应用关联的用户界面的指令,所述用户界面可以是钉钉应用的主页面,也可以是所记录的上次退出钉钉应用时所显示的用户界面。
步骤S102:在主线程里对用户界面进行测量和布局,其中在发生文字排版事件时创建一个工作线程,在该工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程。
本领域技术人员都知道,一个Android应用程序窗口里面包含了很多UI元素,这些UI元素是以树形结构来组织的,即它们存在着父子关系,其中子UI元素设位于父UI元素里面,因此在显示Android应用程序窗口的UI之前,需要先确定它里面的各个子UI元素在父UI元素里面的大小以及位置。确定各个子UI元素在父UI元素里面的大小以及位置的过程又称为测量过程和布局过程。
其中,测量的目的是确定各个子UI元素在父UI元素里面的大小。
其中,布局的目的是确定各个子UI元素在父UI元素里面的位置。
而文字排版是布局里的重要一个环节。
由于测量和布局都是采用本领域公知技术来实现,这里不对此做过多介绍。另外,文字排版也是采用本领域公知技术来实现,这里不对文字排版的具体实现手段做详细描述。而将重点放在如何实现在工作线程里完成文字排版。
当有文字发生变化时,例如从无到有或者从有到变化,此时需要进行文字排版。现有技术采用的方式是直接在主线程里使用TextView组件完成文字排版,但正如上面所述,文字排版耗费时间较长,会引起绘制的流程阻塞,当主线程的任务量较多时,还会发生卡顿现象。为了改善这个问题,发明人设计了这样一个机制:在需要进行文字排版时(即在发生文字排版事件时),在主线程里创建一个工作线程,在该工作线程里使用现有的文字排版工具来完成文字排版并将相关数据传递到主线程。
其中,在遵守单线程模型的原则下,所述文字排版工具不在Android UI工具包的范围内,例如可以是StaticLayout文字排版工具,因此不会发生异常情况。另外,StaticLayout文字排版工具只是对文字的大小、位置、间距等进行计算,不对图片排版,也不会产生特殊效果,例如文字跑马灯效果,因此仅仅是对单纯的普通文字进行排版。
StaticLayout文字排版工具也是本领域技术人员公知的工具类,这里不再过多介绍如何使用StaticLayout文字排版工具来进行文字排版。这里简单介绍一下StaticLayout的参数。
StaticLayout(CharSequence source,int bufstart,int bufend,
TextPaint paint,int outerwidth,
Alignment align,
float spacingmult,float spacingadd,
boolean includepad,
TextUtils.TruncateAt ellipsize,int ellipsizedWidth)
1.需要分行的字符串;
2.需要分行的字符串从第几的位置开始;
3.需要分行的字符串到哪里结束;
4.画笔对象;
5.layout的宽度,字符串超出宽度时自动换行;
6.layout的对齐方式,有ALIGN_CENTER,ALIGN_NORMAL,ALIGN_OPPOSITE三种。
7.相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。
8.在基础行距上添加多少,0表示0个像素;
9.参数未知;
10.从什么位置开始省略;
11.超过多少开始省略。
另外,为了能让在工作线程中产生的文字排版数据传递到主线程,本发明使用handler机制将工作线程发送的数据传递给主线程。
本领域技术人员都知道,Handler主要用于异步消息的处理,是Android系统中专门用来在线程之间传递信息类的工具。Handler运行在主线程中(UI线程中),它与工作线程可以通过Message对象来传递数据,Handler接受工作线程传过来的Message对象(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。具体而言,当应用程序开启时,系统会自动为UI线程创建一个MessageQueue(消息队列)和Looper循环处理对象。首先需要在主线程(UI线程)中直接使用new Handler()创建一个Handler对象,其将自动与主线程的Looper对象绑定,looper会不停的从messageQuee中取出消息(message)。然后主线程就会根据message中的内容进行相应的操作。当工作线程执行完文字排版需要进行UI操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。之后这条消息就会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,并找到与消息对象对应的Handler对象,然后调用Handler的handleMessage()方法。由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,从而实现了UI操作。
步骤S103:在主线程里根据得到的各种数据参数进行绘制以显示用户界面。
具体的,将view对象绘制到屏幕上,如果它是一个viewGroup,则需要递归绘制它所有的子视图。可以绘制的视图元素包括但不限于:
1,view背景,所有view都会有一个背景,可以是一个颜色值,也可以是一张背景图片;
2,视图本身内容,比如上述已经排版好的文字;
3,渐变边框,就是一个shader对象,让视图看起来更具有层次感;
4,滚动条。
可以采用本领域公知的技术手段实现用户界面的绘制并显示在屏幕上,此非本发明的重点,因此不做过多赘述。
本发明实施例提供的一种用户界面显示方法,其能够将文字排版的操作从主线程移到工作线程上而不会发生异常情况,减少了主线程非绘制行为的占用时间,使得TextView在显示的时候无需在主线程进行过多的文字排版行为,减少了排版时间,间接提升了绘制性能,改善了多文字展示时的动画卡顿问题。
图2是本发明的用户界面显示装置的框图,该用户界面显示装置可以用来实现图1所示的方法,故重复部分不再详细描述。如图2所示,本发明的用户界面显示装置包括:
接收模块,用于接收显示用户界面的指令;
界面测量和布局模块,用于在主线程里对用户界面进行测量和布局;
工作线程创建模块,用于在发生文字排版事件时创建一个工作线程;
文字排版模块,用于在所创建的工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程;
界面绘制模块,用于在主线程里根据得到的各种数据参数进行绘制以使得在屏幕上显示用户界面。
其中所述文字排版工具不在Android UI工具包的范围内。
其中所述文字排版工具是StaticLayout。
其中还包括:数据传递模块,用于使用handler机制将工作线程发送的数据传递给主线程。
本发明实施例提供的一种用户界面显示装置,其能够将文字排版的操作从主线程移到工作线程上而不会发生异常情况,减少了主线程非绘制行为的占用时间,使得TextView在显示的时候无需在主线程进行过多的文字排版行为,减少了排版时间,间接提升了绘制性能,改善了多文字展示时的动画卡顿问题。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例所提供的户界面显示方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种用户界面显示方法,其包括:
接收显示用户界面的指令;
在主线程里对用户界面进行测量和布局,其中在发生文字排版事件时创建一个工作线程,在该工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程;
在主线程里根据得到的各种数据参数进行绘制以显示用户界面。
2.根据权利要求1所述的用户界面显示方法,其特征在于所述文字排版工具不在Android UI工具包的范围内。
3.根据权利要求1所述的用户界面显示方法,其特征在于所述文字排版工具是StaticLayout。
4.根据权利要求1所述的用户界面显示方法,其特征在于使用handler机制将工作线程发送的数据传递给主线程。
5.一种用户界面显示装置,其包括:
接收模块,用于接收显示用户界面的指令;
界面测量和布局模块,用于在主线程里对用户界面进行测量和布局;
工作线程创建模块,用于在发生文字排版事件时创建一个工作线程;
文字排版模块,用于在所创建的工作线程里使用文字排版工具来完成文字排版并将相关数据传递到主线程;
界面绘制模块,用于在主线程里根据得到的各种数据参数进行绘制以使得在屏幕上显示用户界面。
6.根据权利要求5所述的用户界面显示装置,其特征在于所述文字排版工具不在Android UI工具包的范围内。
7.根据权利要求5所述的用户界面显示装置,其特征在于所述文字排版工具是StaticLayout。
8.根据权利要求5所述的用户界面显示装置,其特征在于还包括:数据传递模块,用于使用handler机制将工作线程发送的数据传递给主线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610561603.8A CN107589962A (zh) | 2016-07-14 | 2016-07-14 | 一种用户界面显示方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610561603.8A CN107589962A (zh) | 2016-07-14 | 2016-07-14 | 一种用户界面显示方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107589962A true CN107589962A (zh) | 2018-01-16 |
Family
ID=61046453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610561603.8A Pending CN107589962A (zh) | 2016-07-14 | 2016-07-14 | 一种用户界面显示方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107589962A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255801A (zh) * | 2018-01-19 | 2018-07-06 | 深圳市富途网络科技有限公司 | 一种Android TextView两端对齐的实现方法 |
CN109062620A (zh) * | 2018-08-01 | 2018-12-21 | 武汉斗鱼网络科技有限公司 | Android帧动画执行方法、装置、终端及可读介质 |
CN110489068A (zh) * | 2018-05-15 | 2019-11-22 | 腾讯科技(深圳)有限公司 | 一种数据显示方法及其设备、存储介质、应用服务器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593231A (zh) * | 2012-08-14 | 2014-02-19 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置及移动终端 |
US20140053058A1 (en) * | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
CN105630507A (zh) * | 2015-12-29 | 2016-06-01 | Tcl集团股份有限公司 | 一种WebView控件界面绘制的方法和装置 |
-
2016
- 2016-07-14 CN CN201610561603.8A patent/CN107589962A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593231A (zh) * | 2012-08-14 | 2014-02-19 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置及移动终端 |
US20140053058A1 (en) * | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
CN105630507A (zh) * | 2015-12-29 | 2016-06-01 | Tcl集团股份有限公司 | 一种WebView控件界面绘制的方法和装置 |
Non-Patent Citations (1)
Title |
---|
FAYWONG8888&CRYSE: "android有无可能在c/c++层且非主线程内做文本的排版测量", 《HTTPS://WWW.V2EX.COM/T/240779》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255801A (zh) * | 2018-01-19 | 2018-07-06 | 深圳市富途网络科技有限公司 | 一种Android TextView两端对齐的实现方法 |
CN110489068A (zh) * | 2018-05-15 | 2019-11-22 | 腾讯科技(深圳)有限公司 | 一种数据显示方法及其设备、存储介质、应用服务器 |
CN110489068B (zh) * | 2018-05-15 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 一种数据显示方法及其设备、存储介质、应用服务器 |
CN109062620A (zh) * | 2018-08-01 | 2018-12-21 | 武汉斗鱼网络科技有限公司 | Android帧动画执行方法、装置、终端及可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104823158B (zh) | 用于简化的知识工程的方法与系统 | |
US8839251B2 (en) | Automating sequential cross-application data transfer operations | |
CN108268615B (zh) | 一种数据处理方法、装置以及系统 | |
US20090113388A1 (en) | Model Based Spreadsheet Scripting Language | |
CN107515759A (zh) | 截屏方法、装置、电子设备及可读存储介质 | |
US10452231B2 (en) | Usability improvements for visual interfaces | |
CN105988665A (zh) | 信息复制系统、信息复制方法及电子设备 | |
CN107589962A (zh) | 一种用户界面显示方法和装置 | |
CN114036443A (zh) | 页面生成方法及装置 | |
CN108694043B (zh) | 页面装修方法和系统 | |
US8818783B2 (en) | Representing state transitions | |
CN106970758A (zh) | 电子文档操作处理方法、装置和电子设备 | |
CN113919158A (zh) | 一种用于飞行控制面板的仿真方法、装置及存储介质 | |
Hassan et al. | The application of Visual Basic computer programming language to simulate numerical iterations | |
CN104951450A (zh) | 用于信息处理的方法和系统 | |
CN114090002A (zh) | 前端界面构建方法、装置、电子设备和存储介质 | |
CN107220045B (zh) | 基于人工智能的建站方法、装置、设备及存储介质 | |
CN105183491A (zh) | 跨平台的桌面gis系统及其启动方法 | |
KR102644170B1 (ko) | 화면 구성 요소에 대한 선택과 좌표 정보 수집을 지원하는 방법 | |
Niranga | Mobile web performance optimization | |
Dostál et al. | A research framework for performing user studies and rapid prototyping of intelligent user interfaces under the OpenOffice. org suite | |
Khaddam et al. | Adapting UsiXML User Interfaces to Cultural Background | |
KR101866033B1 (ko) | 웹 브라우저에서의 그리드 렌더링 방법 및 이를 적용한 컴퓨팅 시스템 | |
Nekrasov | Text Editing | |
Bjornander | C++ Windows Programming |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200527 Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio square 14 storey tower Applicant before: GUANGZHOU UCWEB COMPUTER TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180116 |
|
RJ01 | Rejection of invention patent application after publication |