CN108958831B - 一种ViewGroup动态布局方法、装置及电子设备 - Google Patents

一种ViewGroup动态布局方法、装置及电子设备 Download PDF

Info

Publication number
CN108958831B
CN108958831B CN201810601454.2A CN201810601454A CN108958831B CN 108958831 B CN108958831 B CN 108958831B CN 201810601454 A CN201810601454 A CN 201810601454A CN 108958831 B CN108958831 B CN 108958831B
Authority
CN
China
Prior art keywords
control
controls
target
laid out
preloading
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.)
Active
Application number
CN201810601454.2A
Other languages
English (en)
Other versions
CN108958831A (zh
Inventor
王龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN201810601454.2A priority Critical patent/CN108958831B/zh
Publication of CN108958831A publication Critical patent/CN108958831A/zh
Application granted granted Critical
Publication of CN108958831B publication Critical patent/CN108958831B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Document Processing Apparatus (AREA)

Abstract

本发明实施例提供了一种ViewGroup动态布局方法、装置及电子设备。其中,所述方法包括:主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知,以使得预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载,并将预加载的至少一个待布局控件存储至第一缓存区;当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件。应用本方案,可以减少主线程耗时,降低丢帧现象发生的概率。

Description

一种ViewGroup动态布局方法、装置及电子设备
技术领域
本发明涉及计算机程序应用技术领域,特别是涉及一种ViewGroup动态布局方法、装置及电子设备。
背景技术
为了能够更好地管理应用界面中各个控件,现有针对控件的布局方式共有五种,分别是:线性布局(LinearLayout)、表格布局(TableLayout)、帧布局(FrameLayout)、相对布局(RelativeLayout)和绝对布局(AbsoluteLayout)。上述各布局之间可以互相嵌套,所有的布局方式都可以归类为ViewGroup的5个类别,即ViewGroup的5个直接子类(也就是上述的五种布局方式),其它的一些布局都可以扩展自这5个类。
现有技术中,用于页面布局的主线程对ViewGroup的视图区域进行控件布局,并且每次布局一屏控件,即视图区域能够显示几个控件便布局几个控件。在每次完成视图区域的控件布局后,如果检测到视图区域中的内容发生滚动时,该主线程则创建待布局控件,初始化所创建的待布局控件,进而将初始化后的待布局控件布局在视图区域中。由于待布局控件的创建和初始化过程需要处理的数据量较大,会消耗一定时间,这样导致加载过程中,会出现超时现象,进而导致容易出现丢帧现象。
发明内容
本发明实施例的目的在于提供一种ViewGroup动态布局方法、装置及电子设备,以通过控件预加载的方式,减少主线程耗时,降低丢帧现象发生的概率。具体技术方案如下:
第一方面,本发明实施例提供了一种ViewGroup动态布局方法,所述方法包括:
主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知,以使得预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载,并将预加载的至少一个待布局控件存储至第一缓存区;
当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;
在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件。
可选的,所述对至少一个待布局控件进行预加载,包括:
确定所述视图区域中当前所布局的末尾控件;
将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
创建并初始化所述第一目标数量个待布局控件。
可选的,所述创建并初始化所述第一目标数量个待布局控件,包括:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
可选的,所述获得与本次滚动过程相匹配的至少一个目标控件,包括:
获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
可选的,所述对至少一个待布局控件进行预加载,包括:
确定所述视图区域中当前所布局的末尾控件和起始控件;
将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件;
创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件。
可选的,所述创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件,包括:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
可选的,所述获得与本次滚动过程相匹配的至少一个目标控件,包括:
获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
可选的,所述方法还包括:
当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区;
所述创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件的步骤,包括:
判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为所述第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识;
如果均在,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件;
如果均不在,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件;
否则,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
可选的,将预加载的至少一个待布局控件存储至第一缓存区之前,所述方法还包括:
当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
第二方面,本发明实施例还提供了一种ViewGroup动态布局装置,所述装置包括:
用于实现主线程的处理功能的通知发送模块、控件获取模块和控件布局模块,以及用于实现预加载线程的处理功能的预加载模块和数据存储模块;
所述通知发送模块,用于主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知;
所述预加载模块,用于预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载;
所述数据存储模块,用于将预加载的至少一个待布局控件存储至第一缓存区;
所述控件获取模块,用于当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;
所述控件布局模块,用于在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件。
可选的,所述预加载模块,包括:
第一确定子模块,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件;
第二确定子模块,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第一创建子模块,用于创建并初始化所述第一目标数量个待布局控件。
可选的,所述第一创建子模块,具体用于:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
可选的,所述控件获取模块,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
可选的,所述预加载模块,包括:
第三确定子模块,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件和起始控件;
第四确定子模块,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第五确定子模块,用于当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件;
第二创建子模块,用于创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件。
可选的,所述第二创建子模块,具体用于:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
可选的,所述控件获取模块,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
可选的,所述装置还包括:缓存模块;
所述缓存模块,用于当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区;
所述第二创建子模块,包括:
判断单元,用于判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为所述第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识;
第一提取单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均在第二缓存区中时,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件;
第三创建单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中时,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件;
第二提取单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件部分在第二缓存区中时,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
可选的,所述装置还包括:
用于实现所述预加载线程的处理功能的数据处理模块;
所述数据处理模块,用于在所述数据存储模块将预加载的至少一个待布局控件存储至第一缓存区之前,当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
第三方面,本发明实施例还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面所述的一种ViewGroup动态布局方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的一种ViewGroup动态布局方法。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的一种ViewGroup动态布局方法。
本发明实施例提供的一种ViewGroup动态布局方法、装置及电子设备,当对ViewGroup的视图区域完成控件布局时,在ViewGroup的视图区域内的内容发生滚动前利用滚动时间间隔,在其他子线程中进行控件的预加载,当ViewGroup的视图区域内的内容发生滚动需要显示控件时,直接加载已经预加载的控件,可以减少主线程耗时,降低丢帧现象发生的概率。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例提供的一种ViewGroup动态布局方法的流程图;
图2为本发明实施例提供的一种初始ViewGroup的视图区域布局示意图;
图3为图1所示实施例中步骤S101的一种待布局控件预加载的具体流程图;
图4为图1所示实施例中步骤S101的另一种待布局控件预加载的具体流程图;
图5为本发明实施例提供的一种ViewGroup的视图区域布局示意图;
图6为图4所示实施例中一种创建并初始化待布局控件的具体流程图;
图7为本发明实施例提供的一种ViewGroup动态布局装置的结构示意图;
图8为本发明实施例中一种预加载模块的结构示意图;
图9为本发明实施例中另一种预加载模块的结构示意图;
图10为本发明实施例中第二创建子模块的结构示意图;
图11为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
为了解决现有技术问题,本发明实施例提供了一种ViewGroup动态布局方法、装置及电子设备,以减少主线程耗时,降低丢帧现象发生的概率。
下面首先对本发明实施例所提供的一种ViewGroup动态布局方法进行介绍。
需要说明的是,本发明实施例所提供的一种ViewGroup动态布局方法可以应用于电子设备中,并且,该电子设备的***环境可以为Android***,当然并不局限于此。
另外,本发明实施例所提供的一种ViewGroup动态布局方法所针对的控件容器ViewGroup,可以延伸为本领域中可放置控件的任一容器,并不局限于ViewGroup。
本发明实施例所提供的一种ViewGroup动态布局方法执行前,用于页面布局的主线程首先可以创建ViewGroup,然后在ViewGroup的视图区域中进行控件的创建、初始化及控件的布局,即完成初始ViewGroup的视图区域的布局。具体的:
当检测到页面新建指令或页面展示指令时,该主线程可以创建ViewGroup,并在ViewGroup的视图区域中进行相关控件的创建,并对所创建的控件进行初始化,再根据预设的布局方式,将初始化之后的控件布局在视图区域中。参见图2,图2为本发明实施例提供的一种初始ViewGroup的视图区域布局示意图,其中,View0至View5为布局在初始ViewGroup视图区域中的控件,实际应用中具体如何布局初始ViewGroup视图区域本发明实施例在此不作限制。
本发明实施例中预设的布局方式,可以是线性布局、表格布局、帧布局、相对布局和绝对布局中的任一种,也可以是后台开发人员或是测试人员根据其需求将上述不同的布局方式相互嵌套、相互组合而成的布局方式,具体预设的布局方式,本发明实施例在此不做限定。
需要说明的是,对于一个页面中的ViewGroup而言,所需展示的控件的类型和数据内容,以及各个控件在ViewGroup的视图区域中的布局方式,均已预先编写在脚本文件中。这样通过运行脚本文件所开启的主线程和预加载线程可以相互协作以完成本申请实施例所提供的方法。
如图1所示,图1为本发明实施例提供的一种ViewGroup动态布局方法的流程图,该方法可以包括如下步骤:
S101,主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知,以使得预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载,并将预加载的至少一个待布局控件存储至第一缓存区。
本发明实施例中,用于页面布局的主线程在检测到对ViewGroup的视图区域完成控件布局时,主线程会向预加载线程发送预加载通知,预加载线程接收到预加载通知后,对待布局控件进行预加载,然后将预加载的待布局控件存储至第一缓存区中。
其中,主线程向预加载线程发送预加载通知,可以是主线程根据预设的布局方式,向预加载线程发送的预加载通知,那么该预加载通知中可以包括需要进行预加载控件的类型信息、数量信息等。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
预加载线程接收到预加载通知后,确定至少一个待布局控件,并对至少一个待布局控件进行预加载,加载完成之后将预加载的至少一个待布局控件存储至第一缓存区中。其中,第一缓存区也可以称为预加载缓存区。具体的,对至少一个待布局控件进行预加载的实现方式存在多种,将在后面的文字中进行详细说明。
可以理解的是,检测到对ViewGroup的视图区域完成控件布局,可以是检测到在初始ViewGroup视图区域中完成控件的创建、初始化及布局,也可以是在ViewGroup视图区域的内容发生变化的过程中检测到对ViewGroup的视图区域完成控件布局。具体应用中,本发明实施例对ViewGroup的视图区域完成控件布局之前的状态或形式在此不作限制。
S102,当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件。
当检测到ViewGroup的视图区域内的内容发生滚动时,从已经完成预加载并存储于第一缓存区中的待布局控件中,获得与本次滚动过程相匹配的至少一个目标控件。
可以理解的是,此处检测到ViewGroup的视图区域内的内容发生滚动,可以是检测到在初始ViewGroup视图区域内的内容首次发生滚动,也可以是在检测到ViewGroup的视图区域内的内容再次发生滚动。具体应用中,本发明实施例对ViewGroup的视图区域内的内容发生滚动的状态在此不作限制。
另外,在实际应用中,ViewGroup的视图区域可以向下滚动,也可以向上滚动。在检测到ViewGroup的视图区域内的内容发生滚动时,可以进一步确定本次滚动过程是向上还是向下的,进而从已经完成预加载并存储于第一缓存区中的待布局控件中,获得与本次滚动过程相匹配的至少一个目标控件。
本发明实施例中,ViewGroup的视图区域内的内容每次发生滚动的幅度,本领域技术人员可以根据实际需求进行设置,本发明实施例在此不作限制。
S103,在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件。
当检测到ViewGroup的视图区域内的内容发生滚动后,并且已经从第一缓存区中的待布局控件中获得了与本次滚动过程相匹配的至少一个目标控件,则该至少一个目标控件滚入当前的ViewGroup视图区域内。然后在当前的ViewGroup视图区域内,根据预设的布局方式布局所滚入的至少一个目标控件。其中,预设的布局方式可参见上文介绍,本发明实施例在此不再赘述。
本发明实施例提供的一种ViewGroup动态布局方法,当对ViewGroup的视图区域完成控件布局时,在ViewGroup的视图区域内的内容发生滚动前利用滚动时间间隔,在其他子线程中进行控件的预加载,当ViewGroup的视图区域内的内容发生滚动需要显示控件时,直接加载已经预加载的控件,可以减少主线程耗时,降低丢帧现象发生的概率。
在上述图1所述实施例的基础上,本发明实施例中步骤S101中对至少一个待布局控件进行预加载的实现方式存在多种,在一种实现方式中,如图3所示,图3为图1所示实施例中步骤S101的一种待布局控件预加载的具体流程图,该实现方式可以包括:
S301,确定所述视图区域中当前所布局的末尾控件。
在主线程向预加载线程发送预加载通知,预加载线程接收到预加载通知后,需要先确定待布局控件,然后再对所需的待布局控件进行预加载。
预加载线程确定待布局控件时,需要先确定视图区域中当前所布局的末尾控件,该末尾控件可以是视图区域中当前所布局的最后一行的最后一个控件。以图2视图区域为例,该视图区域中当前所布局的末尾控件为控件View5。
S302,将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件。
在确定视图区域中当前所布局的末尾控件之后,将预先指定的、确定的末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件。其中,预先指定的第一目标数量,可以为基于视图区域的布局需求,根据预先设置的视图区域中的内容将要滚动的高度等内容,对第一目标数量进行预先设定。该预先设置的第一目标数量本领域技术人员可根据实际需求进行设置,本发明实施例在此不作限制。
另外,视图区域中当前所布局的末尾控件已确定,则预先指定的、确定的末尾控件之后的连续第一目标数量个控件中的第一个控件,为该末尾控件的下一个控件。以图2视图区域为例,该视图区域中当前所布局的末尾控件为控件View5,若预先指定的第一目标数量为3,那么该预先指定的、末尾控件View5之后的连续3个控件中的第一个控件可以为View6。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
S303,创建并初始化所述第一目标数量个待布局控件。
确定视图区域中当前所布局的末尾控件,并确定了第一目标数量个待布局控件之后,可以对第一目标数量个待布局控件进行创建,并对所创建的第一目标数量个待布局控件进行初始化。
进一步的,创建并初始化所述第一目标数量个待布局控件的实现方式可以包括:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
其中,预加载线程确定视图区域中当前所布局的末尾控件,并确定了第一目标数量个待布局控件之后,创建第一目标数量个待布局控件,然后对所创建的第一目标数量个待布局控件进行初始化。
其中,对所创建的第一目标数量个待布局控件进行初始化可以包括:
以确定的视图区域中当前所布局的末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
以图2视图区域为例,该视图区域中当前所布局的末尾控件为控件View5,该末尾控件View5的第一位置标识为5,以末尾控件View5的第一位置标识的下一位置标识为起始位置标识,则该起始位置标识为6。如果第一目标数量为2,即创建2个待布局控件,设置所创建的2个待布局控件的位置标识分别为6和7,并对所创建的2个位置标识分别为6和7的待布局控件进行相应的类型标识和数据绑定,具体的类型标识和数据绑定的过程可参见现有技术的实现,本发明实施例在此不作赘述。
基于上述一种对至少一个待布局控件进行预加载的实现,所述获得与本次滚动过程相匹配的至少一个目标控件,可以包括:
获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
上述一种对至少一个待布局控件进行预加载的实现方式,主要是对视图区域中当前所布局的末尾控件之后的控件进行预加载的实现方式,该实现方式在ViewGroup的视图区域中内容发生滚动时所对应的是向下滚动的过程。那么在检测到ViewGroup的视图区域内的内容发生向下滚动时,可以获取的是与本次向下滚动高度相匹配的至少一个目标控件。
假设本次向下滚动的高度为2行,那么应该获取的是与将要滚入视图区域中2行相匹配的目标控件。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
在上述图1所述实施例的基础上,本发明实施例中步骤S101中对至少一个待布局控件进行预加载的实现方式存在多种,在另一种实现方式中,如图4所示,图4为图1所示实施例中步骤S101的另一种待布局控件预加载的具体流程图,该实现方式可以包括:
S401,确定所述视图区域中当前所布局的末尾控件和起始控件。
在主线程向预加载线程发送预加载通知,预加载线程接收到预加载通知后,需要先确定待布局控件,然后再对所需的待布局控件进行预加载。
预加载线程确定待布局控件时,需要先确定视图区域中当前所布局的末尾控件和起始控件,该末尾控件可以是视图区域中当前所布局的最后一行的最后一个控件,该起始控件可以是视图区域中当前所布局的第一行的第一个控件。参见图5,图5为本发明实施例提供的一种ViewGroup的视图区域布局示意图,以图5视图区域为例,该视图区域中当前所布局的末尾控件为控件View7,当前所布局的起始控件为控件View2。
S402,将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件。
在确定视图区域中当前所布局的末尾控件和起始控件之后,将预先指定的、确定的末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件。其中,预先指定的第一目标数量,可以为基于视图区域的布局需求,根据预先设置的视图区域中的内容将要滚动的高度等内容,对第一目标数量进行预先设定。具体的,该预先设置的第一目标数量本领域技术人员可根据实际需求进行设置,本发明实施例在此不作限制。
另外,视图区域中当前所布局的末尾控件已确定,则预先指定的、确定的末尾控件之后的连续第一目标数量个控件中的第一个控件,为该末尾控件的下一个控件。以图5视图区域为例,该视图区域中当前所布局的末尾控件为控件View7,若预先指定的第一目标数量为2,那么该预先指定的、末尾控件View7之后的连续2个控件中的第一个控件可以为View8。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
S403,当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件。
在确定视图区域中当前所布局的末尾控件和起始控件之后,判断起始控件的第二位置标识是否为预设最小位置标识。若起始控件的第二位置标识为预设最小位置标识时,说明该视图区域为初始视图区域,且该视图区域中的内容不能实现向上滚动。若起始控件的第二位置标识不为预设最小位置标识时,说明该视图区域不为初始视图区域,且该视图区域中的内容能够实现向上滚动。其中,本领域技术人员可以理解,预设最小位置标识为初始视图区域中所创建的第一个控件的位置标识,举例而言:预设最小位置标识可以为0,当然并不局限于此。
当起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、确定的起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件。其中,预先指定的第二目标数量,可以为基于视图区域的布局需求,根据预先设置的视图区域中的内容将要滚动的高度等内容,对第二目标数量进行预先设定。具体的,该预先设置的第二目标数量本领域技术人员可根据实际需求进行设置,本发明实施例在此不作限制。
另外,视图区域中当前所布局的起始控件已确定,则预先指定的、确定的起始控件之前的连续第二目标数量个控件中的第一个控件,为该起始控件的上一个控件。以图5视图区域为例,该视图区域中当前所布局的起始控件为控件View2,若预先指定的第二目标数量为2,那么该预先指定的、起始控件View2之前的连续2个控件中的第一个控件可以为View1。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
S404,创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件。
确定视图区域中当前所布局的末尾控件和起始控件,并确定了第一目标数量个待布局控件和第二目标数量个待布局控件之后,可以对第一目标数量个待布局控件和第二目标数量个待布局控件进行创建,并对所创建的第一目标数量个待布局控件和第二目标数量个待布局控件进行初始化。
其中,所述第一目标数量的确定方式可以为:当判断出预先指定的、所述末尾控件之后的控件的数量不小于第一预设数量时,将所述第一预设数量作为第一目标数量,否则,将预先指定的、所述末尾控件之后的所有控件的数量作为第一目标数量。
所述第二目标数量的确定方式可以为:当判断出预先指定的、所述起始控件之前的控件的数量不小于第二预设数量时,将所述第二预设数量作为第二目标数量,否则,将预先指定的、所述起始控件之前的所有控件的数量作为第二目标数量。
上述第一预设数量和第二预设数量可以是预先设置好的,当预加载线程接收到预加载通知后,先确定待布局控件的数量(第一目标数量和第二目标数量),再对待布局控件进行创建和初始化。主线程向预加载线程发送预加载通知,可以是主线程根据预设的布局方式,向预加载线程发送的预加载通知,那么预加载线程所确定的待布局控件数量,就可能和预先设置好的第一预设数量和第二预设数量存在差异,则待布局控件的数量可以进一步通过上述方式进行确定。当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
具体的,第一目标数量和第二目标数量、第一预设数量和第二预设数量可以相同,也可以不同,本领域技术人员可根据实际需求进行设置,本发明实施例在此不作限制。
创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件的实现方式可以包括:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
在预加载线程确定视图区域中当前所布局的末尾控件和起始控件,并确定了第一目标数量个待布局控件和第二目标数量个待布局控件之后,创建第一目标数量个待布局控件和第二目标数量个待布局控件,然后对所创建的第一目标数量个待布局控件和第二目标数量个待布局控件进行初始化。
其中,对所创建的第一目标数量个待布局控件进行初始化可以包括:
以确定的视图区域中当前所布局的末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。以图5视图区域为例,该视图区域中当前所布局的末尾控件为控件View7,该末尾控件View7的第一位置标识为7,以末尾控件View7的第一位置标识的下一位置标识为起始位置标识,则该起始位置标识为8。如果第一目标数量为2,即创建2个待布局控件,设置所创建的2个待布局控件的位置标识分别为8和9,并对所创建的2个位置标识分别为8和9的待布局控件进行相应的类型标识和数据绑定,具体的类型标识和数据绑定的过程可参见现有技术的实现,本发明实施例在此不作赘述。
对所创建的第二目标数量个待布局控件进行初始化可以包括:
以确定的视图区域中当前所布局的起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。以图5视图区域为例,该视图区域中当前所布局的起始控件为控件View2,该起始控件View2的第二位置标识为2,以起始控件View2的第二位置标识的上一位置标识为起始位置标识,则该起始位置标识为1。如果第二目标数量为2,即创建2个待布局控件,设置所创建的2个待布局控件的位置标识分别为1和0,并对所创建的2个位置标识分别为1和0的待布局控件进行相应的类型标识和数据绑定,具体的类型标识和数据绑定的过程可参见现有技术的实现,本发明实施例在此不作赘述。
基于上述另一种对至少一个待布局控件进行预加载的实现,所述获得与本次滚动过程相匹配的至少一个目标控件,可以包括:
获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
上述另一种对至少一个待布局控件进行预加载的实现方法,主要是对视图区域中当前所布局的末尾控件之后和起始控件之前的控件进行预加载的实现方式,该实现方式在ViewGroup的视图区域中内容发生滚动时所对应的分别是向下和向上滚动的过程。那么在ViewGroup的视图区域内的内容发生滚动时,首先需要确定本次滚动的方向,然后再获取与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
假设本次滚动过程为向下滚动,且滚动的高度为2行,那么应该获取的是与本次向下滚动过程中将要滚入视图区域中2行相匹配的目标控件。若本次滚动过程为向上滚动,且滚动的高度为1行,那么应该获取的是与本次向上滚动过程中将要滚入视图区域中1行相匹配的目标控件。另外,在向上滚动的过程中,若滚入视图区域中的最后一个控件的位置标识达到预设最小位置标识时,则向上滚动过程停止,不能继续向上滚动。
当然,本发明实施例只是以上述方式作为示例,其并不应该构成对本发明实施例的限定。
实际应用中,ViewGroup的视图区域内的内容发生滚动,可以是在初始ViewGroup视图区域内的内容首次发生滚动,也可以是ViewGroup的视图区域内的内容再次发生滚动,即ViewGroup的视图区域内的内容发生滚动可以是只向下滚动,也可以是既能够向上滚动也能够向下滚动的。ViewGroup的视图区域内的内容发生滚动,需要对将要滚入视图区域的控件进行预加载,为了节省控件预加载的时间,本发明基于上述实施例所提供的一种ViewGroup动态布局方法,还可以包括:
当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区。
本发明实施例中,当检测到视图区域内的内容发生滚动时,可以将发生滚动时移出视图区域的控件进行回收,存储至第二缓存区中。以图2视图区域为例,当图2视图区域内的内容向下滚动一行时,将控件View0和View1移出视图区域,并将移出视图区域的控件View0和View1进行回收,存储至第二缓存区中,同时可以对第一缓存区中的预加载控件View6和View7进行加载,控件View6和View7滚入视图区域,对滚入视图区域的控件进行布局之后,可参见图5所示。
相似的,以图5视图区域为例,当图5视图区域内的内容向上滚动一行时,将控件View6和View7移出视图区域,并将移出视图区域的控件View6和View7进行回收,存储至第二缓存区中,同时可以对第一缓存区中的预加载控件View1和View0进行加载,控件View1和View0滚入视图区域,对滚入视图区域的控件进行布局之后,可参见图2所示。
当然,本发明实施例只是以上述实现方式作为示例,其并不应该构成对本发明实施例的限定。
相应的,如图6所示,图6为图4所示实施例中一种创建并初始化待布局控件的具体流程图,该所述创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件的实现方式,可以包括:
S601,判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为所述第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识。
本发明实施例中,在第二缓存区中存储视图区域内的内容发生滚动时移出视图区域的控件,那么在创建并初始化第一目标数量个待布局控件和第二目标数量个待布局控件时,可以先判断已确定的将要创建的待布局控件的位置标识是否在第二缓存区中已经存在,若都存在,则执行S602;若都不存在,则执行S603;若部分存在,则执行S604。
其中,上述的第一标识范围,是根据视图区域中当前所布局的末尾控件的第一位置标识及第一目标数量确定的,也是视图区域发生向下滚动时,所需创建的待布局控件的位置标识的范围;第二标识范围,是根据视图区域中当前所布局的起始控件的第二位置标识及第二目标数量确定的,也是视图区域发生向上滚动时,所需创建的待布局控件的位置标识的范围。
S602,如果均在,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件。
当判断出第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均在第二缓存区中,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件。也就是说,当判断出预加载线程所需要预加载的待布局控件对应的位置标识,均与第二缓存区中所保存控件的位置标识相同,那么,从第二缓存区中直接提取预加载线程所需要预加载的待布局控件对应位置标识所对应的控件,不再需要进行新控件的创建。
例如,假设第二缓存区中已存储有位置标识分别为0、1、8、9的控件,此时视图区域如图5所示,在第一目标数量和第二目标数量都为2的情况下,第一标识范围为(7,9]、第二标识范围为[0,2),即第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均在第二缓存区中,则直接从第二缓存区中提取位置标识分别为0、1、8、9的控件。上述实现方式仅仅作为示例,并不应该构成对本发明实施例的限定。
S603,如果均不在,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件。
当判断出第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中时,则需要创建第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的第一目标数量个待布局控件和第二目标数量个待布局控件。也就是说,当判断出预加载线程所需要预加载的待布局控件对应的位置标识,均不与第二缓存区中所保存控件的位置标识相同,或此时第二缓存区中并未保存有控件,那么,需要创建预加载线程所需要预加载的待布局控件,并对所创建的待布局控件进行初始化。
实际应用中,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中的一种情况可以为:初始ViewGroup的视图区域布局完成时,此时第二缓存区中并没有存储相关控件,那么,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中,但此时视图区域的起始控件第二位置标识为预设最小位置标识,则不存在第二标识范围,需要创建第一目标数量个待布局控件。
另一种情况可以为:视图区域内的内容已经发生过滚动,但是对于发生滚动时移出视图区域的控件在回收时出现问题,即回收的控件未保存到第二缓存区中,那么此时第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件也均不在第二缓存区中,需要创建第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的第一目标数量个待布局控件和第二目标数量个待布局控件。
当然,本发明只是以上述第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中的情形为例进行说明,实际应用中第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中的情形并不仅限于此。
S604,否则,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
当判断出第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件部分在第二缓存区中时,从第二缓存区中提取具有第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识的控件,创建并初始化第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
假设,视图区域如图5所示,第二缓存区中已存储有位置标识分别为0、1、8、9的控件,在第一目标数量为2、第二目标数量为4的情况下,第一标识范围为(7,11]、第二标识范围为[0,2),即第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件部分在第二缓存区中。那么,从第二缓存区中提取位置标识分别为0、1、8、9的控件,还需要创建并初始化位置标识为10和11的控件。当然,本发明实施例只是以上述情形为例进行说明,实际应用中第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件只有部分在第二缓存区中的情形并不仅限于此。
基于上述当检测到视图区域内的内容发生滚动时,可以将发生滚动时移出视图区域的控件进行回收,存储至第二缓存区中,其创建并初始化第一目标数量个待布局控件和第二目标数量个待布局控件的方法,将预加载的至少一个待布局控件存储至第一缓存区之前,本发明实施例还可以包括:
当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
本发明实施例中,在对至少一个待布局控件进行预加载的过程中,当判断出预加载线程所需要进行预加载的待布局控件所对应的位置标识,在第二缓存区中存在时,从第二缓存区中提取所需要进行预加载的待布局控件所对应位置标识的控件。
实际应用中,从第二缓存区中提取控件之后,一种情况可以为,***中设置有数据校验模块,可以判断所需要进行预加载的待布局控件当前所需绑定数据,与从第二缓存区中提取控件所绑定数据是否发生变更,当判断出从第二缓存区中提取控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将从第二缓存区中提取控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据。当判断出从第二缓存区中提取控件所绑定数据与相应待布局控件当前所需绑定数据相同时,不对从第二缓存区中提取控件所绑定数据做更改。
从第二缓存区中提取控件之后,另一种情况还可以为,***中没有设置数据校验模块,不可以判断所需要进行预加载的待布局控件当前所需绑定数据,与从第二缓存区中提取控件所绑定数据是否发生变更,该情形下,不对从第二缓存区中提取控件所绑定数据做更改。
当然,本发明实施例只是以上述情形为例进行说明,实际应用中是否对从第二缓存区中提取控件所绑定数据做更改的情形并不仅限于此。
本发明实施例提供的一种ViewGroup动态布局方法,当对ViewGroup的视图区域完成控件布局时,在ViewGroup的视图区域内的内容发生滚动前利用滚动时间间隔,在其他子线程中进行控件的预加载。在ViewGroup的视图区域内的内容发生滚动时将移出视图区域的控件进行回收并保存,在子线程需要创建控件时,可以先从保存的控件中进行提取,减少控件的创建及数据处理操作。当ViewGroup的视图区域内的内容发生滚动需要显示控件时,直接加载已经预加载的控件,可以减少主线程耗时,降低丢帧现象发生的概率。
相应于上述方法实施例,本发明实施例提供了一种ViewGroup动态布局装置,如图7所示,所述装置可以包括:
用于实现主线程的处理功能的通知发送模块、控件获取模块和控件布局模块,以及用于实现预加载线程的处理功能的预加载模块和数据存储模块;
通知发送模块710,用于主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知;
预加载模块720,用于预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载;
数据存储模块730,用于将预加载的至少一个待布局控件存储至第一缓存区;
控件获取模块740,用于当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;
控件布局模块750,用于在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件。
本发明实施例提供的一种ViewGroup动态布局装置,当对ViewGroup的视图区域完成控件布局时,在ViewGroup的视图区域内的内容发生滚动前利用滚动时间间隔,在其他子线程中进行控件的预加载,当ViewGroup的视图区域内的内容发生滚动需要显示控件时,直接加载已经预加载的控件,可以减少主线程耗时,降低丢帧现象发生的概率。
需要说明的是,本发明实施例的装置是与图1所示的一种ViewGroup动态布局方法对应的装置,图1所示的一种ViewGroup动态布局方法的所有实施例均适用于该装置,且均能达到相同的有益效果。
图8为本发明实施例中一种预加载模块的结构示意图,与前述图3一种待布局控件预加载的实现方式相对应,该装置可以包括:
第一确定子模块810,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件;
第二确定子模块820,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第一创建子模块830,用于创建并初始化所述第一目标数量个待布局控件。
所述第一创建子模块830,具体用于:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
进一步的,所述控件获取模块820,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
图9为本发明实施例中另一种预加载模块的结构示意图,与前述图4另一种待布局控件预加载的实现方式相对应,该装置可以包括:
第三确定子模块910,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件和起始控件;
第四确定子模块920,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第五确定子模块930,用于当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件;
第二创建子模块940,用于创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件。
所述第二创建子模块940,具体用于:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
进一步的,所述控件获取模块820,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
优选地,图7所示装置还可以包括:缓存模块;
所述缓存模块,用于当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区;
图10为本发明实施例中第二创建子模块的结构示意图,与前述图6一种创建并初始化待布局控件的实现方式相对应,该装置可以包括:
判断单元101,用于判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为所述第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识;
第一提取单元102,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均在第二缓存区中时,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件;
第三创建单元103,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中时,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件;
第二提取单元104,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件部分在第二缓存区中时,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
进一步的,所述装置还可以包括:用于实现所述预加载线程的处理功能的数据处理模块;
所述数据处理模块,用于当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
本发明实施例还提供了一种电子设备,如图11所示,包括处理器111、通信接口112、存储器113和通信总线114,其中,处理器111,通信接口112,存储器113通过通信总线114完成相互间的通信,
存储器113,用于存放计算机程序;
处理器111,用于执行存储器113上所存放的程序时,实现本发明实施例所提供的方法。
本发明实施例提供的一种电子设备,当对ViewGroup的视图区域完成控件布局时,在ViewGroup的视图区域内的内容发生滚动前利用滚动时间间隔,在其他子线程中进行控件的预加载,当ViewGroup的视图区域内的内容发生滚动需要显示控件时,直接加载已经预加载的控件,可以减少主线程耗时,降低丢帧现象发生的概率。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的ViewGroup动态布局方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的ViewGroup动态布局方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (13)

1.一种ViewGroup动态布局方法,其特征在于,包括:
主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知,以使得预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载,并将预加载的至少一个待布局控件存储至第一缓存区;
当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;
在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件;
其中,所述对至少一个待布局控件进行预加载,包括:
确定所述视图区域中当前所布局的末尾控件;
将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
创建并初始化所述第一目标数量个待布局控件;
或者,所述对至少一个待布局控件进行预加载,包括:
确定所述视图区域中当前所布局的末尾控件和起始控件;
将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件;
创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
所述方法还包括:
所述第一目标数量的确定方式为:当判断出预先指定的、所述末尾控件之后的控件的数量不小于第一预设数量时,将所述第一预设数量作为第一目标数量,否则,将预先指定的、所述末尾控件之后的所有控件的数量作为第一目标数量;
所述第二目标数量的确定方式为:当判断出预先指定的、所述起始控件之前的控件的数量不小于第二预设数量时,将所述第二预设数量作为第二目标数量,否则,将预先指定的、所述起始控件之前的所有控件的数量作为第二目标数量;
当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区;
所述创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件的步骤,包括:
判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识;
如果均在,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件;
如果均不在,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件;
否则,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
2.根据权利要求1所述的方法,其特征在于,所述创建并初始化所述第一目标数量个待布局控件,包括:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
3.根据权利要求1所述的方法,其特征在于,所述获得与本次滚动过程相匹配的至少一个目标控件,包括:
获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
4.根据权利要求1所述的方法,其特征在于,所述创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件,包括:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
5.根据权利要求1所述的方法,其特征在于,所述获得与本次滚动过程相匹配的至少一个目标控件,包括:
获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
6.根据权利要求1所述的方法,其特征在于,将预加载的至少一个待布局控件存储至第一缓存区之前,所述方法还包括:
当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
7.一种ViewGroup动态布局装置,其特征在于,包括:
用于实现主线程的处理功能的通知发送模块、控件获取模块和控件布局模块,以及用于实现预加载线程的处理功能的预加载模块和数据存储模块;
所述通知发送模块,用于主线程在检测到对ViewGroup的视图区域完成控件布局时,向预加载线程发送预加载通知;
所述预加载模块,用于预加载线程在接收到预加载通知时,对至少一个待布局控件进行预加载;
所述数据存储模块,用于将预加载的至少一个待布局控件存储至第一缓存区;
所述控件获取模块,用于当检测到所述ViewGroup的视图区域内的内容发生滚动时,从所述第一缓存区中,获得与本次滚动过程相匹配的至少一个目标控件;
所述控件布局模块,用于在所述ViewGroup的视图区域中,根据预设的布局方式布局所述至少一个目标控件;
其中,所述预加载模块,包括:
第一确定子模块,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件;
第二确定子模块,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第一创建子模块,用于创建并初始化所述第一目标数量个待布局控件;
或者,所述预加载模块,包括:
第三确定子模块,用于预加载线程在接收到预加载通知时,确定所述视图区域中当前所布局的末尾控件和起始控件;
第四确定子模块,用于将预先指定的、所述末尾控件之后的连续第一目标数量个控件,作为第一目标数量个待布局控件;
第五确定子模块,用于当所述起始控件的第二位置标识不为预设最小位置标识时,将预先指定的、所述起始控件之前的连续第二目标数量个控件,作为第二目标数量个待布局控件;
第二创建子模块,用于创建并初始化所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
所述装置还包括:第一目标数量确定模块,第二目标数量确定模块,以及缓存模块;
所述第一目标数量确定模块,用于当判断出预先指定的、所述末尾控件之后的控件的数量不小于第一预设数量时,将所述第一预设数量作为第一目标数量,否则,将预先指定的、所述末尾控件之后的所有控件的数量作为第一目标数量;
所述第二目标数量确定模块,用于当判断出预先指定的、所述起始控件之前的控件的数量不小于第二预设数量时,将所述第二预设数量作为第二目标数量,否则,将预先指定的、所述起始控件之前的所有控件的数量作为第二目标数量;
所述缓存模块,用于当检测到所述视图区域内的内容发生滚动时,将移出所述视图区域的控件存储至第二缓存区;
所述第二创建子模块,包括:
判断单元,用于判断第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件是否在第二缓存区中;其中,X1为第一位置标识,X2为所述第一位置标识与所述第一目标数量之和,X3为所述第二位置标识与所述第二目标数量之差,X4为所述第二位置标识;
第一提取单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均在第二缓存区中时,则从第二缓存区中提取第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件;
第三创建单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件均不在第二缓存区中时,则创建所述第一目标数量个待布局控件和第二目标数量个待布局控件,并初始化所创建的所述第一目标数量个待布局控件和第二目标数量个待布局控件;
第二提取单元,用于当所述判断单元判断出,第一标识范围(X1,X2]和第二标识范围[X3,X4)内的各个位置标识对应的控件部分在第二缓存区中时,从第二缓存区中提取具有第一目标标识的控件,创建并初始化目标待布局控件;其中,所述第一目标标识为位于第一标识范围(X1,X2]或第二标识范围[X3,X4)内的位置标识;所述目标待布局控件为第一目标数量个待布局控件和第二目标数量个待布局控件中,除从第二缓存区中所提取的控件以外的控件。
8.根据权利要求7所述的装置,其特征在于,所述第一创建子模块,具体用于:
创建所述第一目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定。
9.根据权利要求7所述的装置,其特征在于,所述控件获取模块,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动高度相匹配的至少一个目标控件。
10.根据权利要求7所述的装置,其特征在于,所述第二创建子模块,具体用于:
创建所述第一目标数量个待布局控件和所述第二目标数量个待布局控件;
以所述末尾控件的第一位置标识的下一位置标识为起始位置标识,设置所创建的第一目标数量个待布局控件的位置标识,并对所创建的第一目标数量个待布局控件进行类型标识和数据绑定;
以所述起始控件的第二位置标识的上一位置标识为起始位置标识,设置所创建的第二目标数量个待布局控件的位置标识,并对所创建的第二目标数量个待布局控件进行类型标识和数据绑定。
11.根据权利要求7所述的装置,其特征在于,所述控件获取模块,具体用于:
当检测到所述ViewGroup的视图区域内的内容发生滚动时,获得与本次滚动过程的滚动方向和滚动高度相匹配的至少一个目标控件。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
用于实现所述预加载线程的处理功能的数据处理模块;
所述数据处理模块,用于在所述数据存储模块将预加载的至少一个待布局控件存储至第一缓存区之前,当判断出第二控件所绑定数据与相应待布局控件当前所需绑定数据不同时,将所述第二控件所绑定的数据更改为:相应待布局控件当前所需绑定的数据;其中,所述第二控件为:从所述第二缓存区中提取的控件。
13.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。
CN201810601454.2A 2018-06-12 2018-06-12 一种ViewGroup动态布局方法、装置及电子设备 Active CN108958831B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810601454.2A CN108958831B (zh) 2018-06-12 2018-06-12 一种ViewGroup动态布局方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810601454.2A CN108958831B (zh) 2018-06-12 2018-06-12 一种ViewGroup动态布局方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN108958831A CN108958831A (zh) 2018-12-07
CN108958831B true CN108958831B (zh) 2021-10-15

Family

ID=64488428

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810601454.2A Active CN108958831B (zh) 2018-06-12 2018-06-12 一种ViewGroup动态布局方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN108958831B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109992263B (zh) * 2019-04-05 2022-09-13 腾讯科技(深圳)有限公司 一种执行可视化编程的方法和装置
CN113590210A (zh) * 2020-04-30 2021-11-02 华为技术有限公司 应用程序中的类验证方法和装置
CN112364276A (zh) * 2020-11-13 2021-02-12 四川长虹电器股份有限公司 一种优化RecyclerView控件使用性能的方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8627204B2 (en) * 2011-10-18 2014-01-07 Microsoft Corporation Custom optimization of web pages
CN103914204B (zh) * 2012-12-31 2018-02-06 北京新媒传信科技有限公司 一种用于视图显示和切换的方法和装置
CN105094769B (zh) * 2014-05-06 2018-07-13 北大方正集团有限公司 用户界面的处理方法和装置
CN104346462B (zh) * 2014-11-07 2017-11-10 北京奇虎科技有限公司 保存网页元素的方法、装置和浏览器客户端
CN105938440A (zh) * 2015-12-28 2016-09-14 乐视移动智能信息技术(北京)有限公司 一种移动终端图片显示方法及***
CN106095461A (zh) * 2016-06-21 2016-11-09 东软集团股份有限公司 在界面中显示组件的方法及装置
CN106371845B (zh) * 2016-09-05 2019-10-25 深圳震有科技股份有限公司 通过控件池基于wpf重复利用同类型控件的方法及***
CN106598588A (zh) * 2016-12-09 2017-04-26 武汉斗鱼网络科技有限公司 一种加载页面元素的方法及装置
CN106961615A (zh) * 2017-03-22 2017-07-18 北京奇艺世纪科技有限公司 一种直播方法及***
CN107589944A (zh) * 2017-08-23 2018-01-16 广州视源电子科技股份有限公司 人机交互接口的建立方法、装置及计算机设备、存储介质
CN107656759B (zh) * 2017-09-04 2021-03-26 口碑(上海)信息技术有限公司 一种用于用户界面的渲染方法和装置
CN107885570A (zh) * 2017-11-16 2018-04-06 口碑(上海)信息技术有限公司 复用视图组件的方法及装置

Also Published As

Publication number Publication date
CN108958831A (zh) 2018-12-07

Similar Documents

Publication Publication Date Title
CN108958831B (zh) 一种ViewGroup动态布局方法、装置及电子设备
US8832578B1 (en) Visual clipboard on soft keyboard
US11720370B2 (en) Electronic apparatus and method of executing application program
CN104991705A (zh) 一种界面显示方法及终端
CN110765379B (zh) 加载资源文件的方法、装置、计算机设备及存储介质
CN107038194B (zh) 一种页面跳转方法和装置
CN106802758B (zh) 用于屏幕截取的处理方法和装置
CN109144392B (zh) 一种处理手势冲突的方法、装置及电子设备
CN105787402A (zh) 一种信息展示方法及装置
US20160062601A1 (en) Electronic device with touch screen and method for moving application functional interface
CN110489041B (zh) 小程序拖动元素自动对齐的方法、装置、设备及介质
CN109062602B (zh) 一种针对应用程序的数据处理方法、装置及电子设备
CN106470351B (zh) 页面显示方法及页面显示装置
CN110908552B (zh) 多窗口操作控制方法、装置、设备及存储介质
CN111367606A (zh) 一种应用程序页面的显示方法、装置、终端及介质
CN104581344A (zh) 一种菜单界面显示方法及数字电视接收终端
CN107133022B (zh) 终端设备中的控件显示方法和装置
CN108595262B (zh) 数据处理方法及装置
CN110221892B (zh) 一种滚动窗口信息的方法、装置、介质和电子设备
CN112256654A (zh) 一种文档共享方法及装置
CN106156153B (zh) 一种加载图片的方法和装置
CN111815340B (zh) 推广信息确定方法、装置、设备及可读存储介质
CN103530025A (zh) 用于移动终端的内容显示方法及***
CN113365137B (zh) 视频广告的显示方法、装置、电子设备及可读存储介质
CN112783395B (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