加载Fragment的方法及终端的制作方法

xiaoxiao2020-10-23  11

加载Fragment的方法及终端的制作方法
【技术领域】
[0001] 本发明设及An化oid技术领域,尤其是设及一种加载化agment的方法及终端。
【背景技术】
[000引化agment是An化oid中的组件,用来展示界面内容,可W接受用户点击、拖动等 操作和用户进行交互。一个复杂的An化oid应用通常由大量的化agment构成,不同的 化agment展示不同的界面实现不同的操作,当大量的化agment同时被加载进内存时,那些 当前没有展示的化agment占用的内存空间被浪费,一般同时只会显示1至3个化agment, 所W如果没有合理管理化agment会有大量的内存被浪费。另一种情况下,把化agment加 载到内存设及到磁盘I/O操作,速度较慢,对用户体验造成影响。

【发明内容】

[0003] 本发明所要解决的技术问题是:提供一种加载化agment的方法及终端,实现对 化agment的选择性加载、卸载并释放内存空间,提高内存使用效率。
[0004] 为了解决上述技术问题,本发明采用的技术方案为:提供一种加载化agment的方 法,包括;生成化agment结点的树结构;确定所述化agment结点在所述树结构上的位置信 息;设置所述化agment结点的加载状态信息;根据所述化agment结点的加载状态信息加 载对应的子结点上的化agment;卸载所述子结点对应的父结点或兄弟结点上的化agment。
[0005] 其中,生成Fragment结点的树结构的步骤具体为:启动程序,并初始化所述程序; 加载JS0N描述文件;根据所述JS0N描述文件定义生成所述树结构。
[0006] 其中,确定所述化agment结点在所述树结构上的位置信息的步骤具体为;定义所 述化agment的关系组织格式;使用JS0N描述所述关系组织格式;确定所述化agment的子 结点、父结点W及兄弟结点的位置信息。
[0007] 其中,设置所述化agment结点的加载状态信息的步骤具体为;关联所述化agment 到对应的名字,并设置所述化agment的路径;确定所述化agment的上下文信息,并根据上 下文信息设置不同化agment之间的组织调用关系;设置所述化agment为预加载、延迟加 载、条件加载的其中一个。
[000引其中,卸载所述子结点对应的父结点或兄弟结点上的化agment具体为:卸载标识 为预加载、延迟加载、条件加载其中一个的化agment结点。
[0009] 其中,根据所述化agment结点的加载状态信息加载对应的子结点上的化agment 的步骤包括;预加载根结点对应的化agment;根据子结点需要预加载的加载状态信息, 预加载对应化agment子结点上的化agment;延迟加载除根结点外的其他结点对应的 Fragment。
[0010] 为解决上述问题,本发明还提供一种加载化agment的终端,包括;树结构单元,用 于生成化agment结点的树结构;位置单元,用于确定所述化agment结点在所述树结构上的 位置信息;元信息单元,用于设置所述化agment结点的加载状态信息;加载单元,用于根据 所述化agment结点的加载状态信息加载对应的子结点上的化agment;卸载单元,用于卸载 所述子结点对应的父结点或兄弟结点上的Fragment。
[0011] 其中,所述树结构单元包括:程序启动子单元,用于启动程序,并初始化所述程序; 树结构生成子单元,用于加载JSON描述文件,并根据所述JSON描述文件定义生成所述树结 构。
[0012] 其中,所述位置单元包括:格式定义子单元,用于定义所述Fragment的关系组织 格式;格式描述子单元,用于使用JSON描述所述关系组织格式;定位子单元,用于确定所述 化agment的子结点、父结点W及兄弟结点的位置信息。
[0013] 其中,所述元信息单元包括;键值对子单元,用于关联所述Fragment到对应的名 字,并设置所述化agment的路径;Context子单元,用于确定所述化agment的上下文信息, 并根据上下文信息设置不同化agment之间的组织调用关系;元信息设置子单元,用于设置 所述化agment为预加载、延迟加载、条件加载的其中一个。
[0014] 本发明的有益效果在于:区别于现有技术,本发明通过生成化agment结点树结 构,并确定其位置信息,设置对应的加载状态信息,并进行加载,最后在化agment使用完后 卸载,实现内存空间的释放,因此在有大量化agment同时加载进内存时,本发明可实现对 化agment的选择性加载、卸载,及时释放内存空间,提高内存使用效率的同时,也提高了磁 盘I/O操作效率,实现在低端设备上运行的可行性。
【附图说明】
[0015] 图1为本发明方法实施例一的流程示意图;
[0016] 图2为本发明方法实施例一具体操作步骤的流程示意图;
[0017] 图3为本发明终端实施例二的结构示意图;
[0018] 图4为本发明终端实施例二具体结构示意图;
[0019] 图5为本发明的方法及终端的整体操作步骤的流程图;
[0020] 图6为本发明具体实施例的界面示意图一;
[0021] 图7为本发明具体实施例的界面示意图二;
[0022] 图8为本发明具体实施例的界面示意图S。
【具体实施方式】
[0023] 为详细说明本发明的技术内容、所实现目的及效果,W下结合实施方式并配合附 图予W说明。
[0024] 请参照图1,本发明方法实施例一提供一种加载化agment的方法,包括如下步骤; [002引S110 ;生成Rragment结点的树结构;
[0026] S120 ;确定所述化agment结点在所述树结构上的位置信息;
[0027] S130 ;设置所述化agment结点的加载状态信息;
[002引S140 ;根据所述化agment结点的加载状态信息加载对应的子结点上的Fragment;
[0029] S150 ;卸载所述子结点对应的父结点或兄弟结点上的化agment。
[0030] 一般地,本领域技术人员可针对要加载的化agment结点的信息,定义生成一个树 结构,树是一种重要的非线性数据结构,由数据元素(在树中称为结点)按分支关系组织起 来的结构。树结构上存在一个特殊的结点,称为根结点或根(root)。除根结点外,其余结点 被分成多个互不相交的有限集合(或子集),每个子集也为树结构形式。在树结构上除根结 点外的其他结点,根据其在树结构上的位置可定义为父结点、子结点或兄弟结点。每个结点 表示一个化agment的元信息,本发明中的元信息主要是指每个化agment结点的加载状态 信息,如是否预加载、是否延迟加载或是否条件加载(即满足相关条件后才进行加载)等加 载状态信息。如一个结点的元信息是预加载,则在程序启动时,就要预先加载其进入内存。 通常根结点都是预加载的,其他所有的结点Fragment都可不预加载,只根据树结构上结点 的元信息加载对应子结点的化agment。
[0031] 而为了不占用过多的内存,对一些结点的元消息设置为延迟加载或条件加载,该 些结点只有满足特定条件或特定的时刻才进行加载。而已加载的结点(包括预加载的)在 使用完后,若卸载后对整个程序不产生负面影响时,可对其进行卸载,该样就可释放内存。
[0032] 从上述描述可知,本发明的有益效果在于;区别于现有技术,本发明方法实施例一 通过为化agment结点生成树结构,并在上树结构确定其位置信息后,根据实际需要对其设 置相应的加载状态信息,并在使用完后卸载。该样实现了对内存空间的充分使用,又不占用 过多的内存,提高相应电子设备的运行速度,如I/O操作等。
[0033] 其中,如图2所示,本发明方法实施例一在执行步骤S110时,可具体执行如下步 骤:
[0034] Sill;启动程序,并初始化所述程序;
[003引 S112 ;加载JS0N描述文件;
[0036] S113 ;根据所述JS0N描述文件定义生成所述树结构。
[0037] 在初始化程序时,可显示根结点对应的化agment,其 他结点的化agment可不预加 载。
[003引JS0N(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它是基于JavaScript(StandardECMA-262化dEdition-December1999)的一个子集。JS0N义用完 全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java, 化¥35(31'191:,?61'1,?71110]1等)。该些特性使於(^成为理想的数据交换语言。易于人阅读 和编写,同时也易于机器解析和生成(网络传输速度)。使用JS0N格式的描述文件非常利 于程序的解析和维护。
[0039] 同理,在执行步骤S120时,可对应执行如下步骤;
[0040] S121 ;定义所述化agment的关系组织格式;
[004US122 ;使用JS0N描述所述关系组织格式;
[00创 S123 ;确定所述化agment的子结点、父结点W及兄弟结点的位置信息。
[0043] 本发明首先定义化agment关系组织格式,使用JS0N描述,并规定如下格式,使用 此格式的好处是非常利于程序解析和方便维护,所有化agment可默认为延迟加载,该样只 需要在配置文件中指定需要预先加载的化agment,降低维护负担。
[0044] 描述格式中出现的几个关键字功能如下:
[0045]"化agments";描述应用中出现的每一个化agment,使用键值对的形式表示,其中 Key表示化3肖1116]11:的名字,Value表示Rragment的类的全路径
[0046] "Context";描述每一个化agment的上下文信息,根据上下文信息组织调用关系。
[0047] "node";描述化agment的结点名字,结点名字是化agments节中的Key。
[0048] "meta";描述结点的元信息,可扩展属性,比如定义是否保存状态。
[0049] "preload";描述是否预加载。
[0化0]"化rceRe化esh";可选,描述当第二次进入界面后是否强制刷新内容,当界面内容 是从网络更新时,可选选择强制更新界面或者不更新界面。
[0化1] 具体的一份描述文件举例如下:
[0化2]
[0化3]
[0化4] 根据上述描述文件,可通过如下方式执行步骤S130 :
[0化5] S131 ;关联所述化agment到对应的名字,并设置所述化agment的路径;
[0化6] S132 ;确定所述化agment的上下文信息,并根据上下文信息设置不同化agment之 间的组织调用关系;
[0化7] S133 ;设置所述化agment为预加载、延迟加载、条件加载的其中一个。
[0化引化agments结点表述了程序中用到的所有化agment类,并指定关联到一个名字。Context结点表述了每个化agment关联的其他化agment,并指定了该些化agment的元信 息,包括是否预加载等信息。
[0059] 其中,在一个具体实施例中,根据所述化agment结点的加载状态信息加载对应的 子结点上的化agment的步骤包括;
[0060] 预加载根结点对应的化agment,该也是因为根结点与其他结点存在区别之处,本 发明中的根结点可W是终端设备的主界面。
[0061] 根据子结点需要预加载的加载状态信息,预加载或条件加载对应化agment子结 点上的化agment;当处在父结点的位置时,在具体实施例中,有时需要根据其子结点的情 况,预先加载或条件加载一个或多个子结点对应上的化agment,W进行后续的操作,如进入 下一个界面或退回到前一个界面。
[0062] 延迟加载除根结点外的其他结点对应的化agment,由于根结点都是预加载的,其 他结点可W根据需要延迟加载,W降低内存的占用,只有在进入到需要加载或预加载的步 骤或界面时,才作相应的操作。
[0063] 综上所述,本发明提供的加载化agment的方法,区别于现有技术,本发明在启动 程序后,使用JS0N描述文件来生成树结构,并描述结点之间的关系组织格式,W确定其在 树结构上的位置,同时关联化agment到对应的名字及设置路径,调用关系W及预先定义不 同加载信息。在实际操作时,用户可根据需要对某些结点进行预加载、条件加载或延迟加 载,W降低对设备内存的过多占用,可适用于在硬件配置低端的设备上。
[0064] 同时,如图3所示,本发明还提供一种加载化agment的终端100,包括;
[0065] 树结构单元110,用于生成化agment结点的树结构;
[0066] 位置单元120,用于确定所述化agment结点在所述树结构上的位置信息;
[0067] 元信息单元130,用于设置所述化agment结点的加载状态信息;
[0068] 加载单元140,用于根据所述化agment结点的加载状态信息加载对应的子结点上 的Fragment;
[0069] 卸载单元150,用于卸载所述子结点对应的父结点或兄弟结点上的化agment。
[0070] 具体地,如图4所示,所述树结构单元110包括;
[0071] 程序启动子单元111,用于启动程序,并初始化所述程序;
[0072] 树结构生成子单元112,用于加载JS0N描述文件,并根据所述JS0N描述文件定义 生成所述树结构。
[0073] 所述位置单元120包括;
[0074] 格式定义子单元121,用于定义所述化agment的关系组织格式;
[0075] 格式描述子单元122,用于使用JS0N描述所述关系组织格式;
[0076] 定位子单元123,用于确定所述化agment的子结点、父结点W及兄弟结点的位置 f目息。
[0077] 所述元信息单元130包括;
[0078] 键值对子单元131,用于关联所述化agment到对应的名字,并设置所述化agment 的路径;
[0079] Context子单元132,用于确定所述化agment的上下文信息,并根据上下文信息设 置不同化agment之间的组织调用关系;
[0080] 元信息设置子单元133,用于设置所述化agment为预加载、延迟加载、条件加载的 其中一个。
[0081] 同时参照图5~8,图5是应用上述方法及终端的一个整体结构流程图,图6~8分 别是在应用本发明方法及终端时工作界面示意图,其中图6~8中,六角框表示已加载进内 存的化agment,虚线框表示当前显示的化agment,实线框表示未加载进内存的化agment, 即存在于磁盘上的化agment。各个框中的直线表示二者之间的跳转关系,因为结点之间可 W交叉,所W从一个结点的化agment可W跳转到另一个结点的化agment,在设置时,只需 维护好其间的跳转关系,即可实现不同界面的加载状态信息的预先定义,如预加载、条件加 载或延迟加载。
[0082] 其中,程序初始化时加载JS0N描述文件,根据描述文件定义生成树结构,并显示 主界面。具体如图5所示,使用JS0N描述文件加载,对该JS0N描述文件解析后生成了 化agment列表W及各个结点的Context信息,完成该些步骤即可生成树结构,完成程序的 初始化,进而在终端设备上显示主界面。一般地,主界面的化agment都可视为是根结点,且 都是预加载的,图5中的X,Y均为通过JS0N描述的结点元信息。
[0083]目P,假如当前显示的是在树结构中的A结点,显示A时发生预加载A所有标记为可 预加载的子结点,忽略标记为不预加载的结点,不预加载的结点只有用户明确跳到该类界 面时发生加载,跳出该类界面后发生卸载。
[0084] 在加载根结点的化agment后,获取根结点的Context信息,视实际情况,如图 6~8所示,可预先加载化agmentA、化agmen巧W进入下一个界面或在主界面上执行相 应的操作,所有当前界面关联的化agment都存在于关联结点的列表中,标记为没有预加 载的界面,只有用户明确跳转到该类界面时发生加载;若当前界面没有关联其他子结点 化agment,则表示列表为空,则表示此界面上没有可操作性,此时用户可W选择回退到上一 界面或者直接选择退出程序。
[0085] 若关联结点的列表中存在预加载或其他加载信息的结点化agment,则表示列表不 为空,用户可选择在进入的下一个界面中继续执行该界面可选的操作,如图6所示,预加载 化agmentAl、化agmentA2。该个步骤实际上是上述步骤的重复,因此还需要执行判断步骤, 若是,则继续下一步操作,反之,则返回对父结点的关联列表的判断。
[0086] 在某个结点处,其关联结点列表为空时,则需要返回到其父结点处,遍历父结点的 关联列表,若父结点关联列表为空,即表示该界面没有可操作性,则切换到其他界面或直接 退出程序。若父结点关联列表不为空,则获取列表中的一个条目进行操作,执行其对应的加 载状态信息,同时为了降低内存的占用,在执行其加载信息后,若对操作不构成影响时,可 及时从内存中卸载该条目。
[0087] 具体地,图6中在显示主界面时,根据界面元信息情况,预加载化agmentA和 化agmen巧,此时内存中同时存在3个化agment(包括主界面的化agment,主界面可视为根 结点)。
[00能]当跳转到RragmentA时,如图7所示,此时显示RragmentA界面,根据该时的 化agmentA结点的元信息描述,预加载化agmentAl和化agmentA2,此时内存中同时存在4 个化agment,因化agmentBl描述为不预先加载,所W不会加载化agmen巧1,只有当用户明 确选择跳转到化agmentBl时才加载,该种情况是因为有些界面用户访问频率较高,而部分 有些较低,较低频率的界面就可W不作预加载,该些预加载的化agment可W通过元信息配 置,用户如可按返回键回到主界面或跳转到化agmentAl、化agmentA2、化agmen巧1W切换 到其他界面,当其他界面都已经加载完毕,操作就可W快速完成。
[0089] 当用户选择跳转到化agmentAl界面,如图8所示,此时显示化agmentAl界面,预 加载化agmentCl,此时主界面(根结点)已不可W直接访问到,所W可W从内存中释放,该 时内存中同时存在3个化agment。
[0090] 由于每次都是只有少数几个活跃的化agment占用内存,因此本发明所述的方法 可适用于低端的设备上。
[0091] 图5中在步骤"判断关联结点列表是否为空"后,若为空,则需要遍历当前结点的 父节点,将其所有预加载的子结点放入列表中,为了释放已加载到内存中化agment,而该种 结点是不可直接访问到的结点,可直接跳转过去、,该种结点可能有多个来源结点,即其所 有的父结点,在取得所有父结点后,遍历该些父结点,可从所有父结点的加载状态信息中判 断是否有已加载的但不可直接访问的结点,对该些结点进行卸载、释放。
[0092] 在实际生活中,An化oid设备上内存有限,假如An化oid框架分配给每个应用的可 用内存空间是30M,如果所有界面同时加载进内存占用15M,留给其他功能的只有15M,当加 载图片时(图片占用大量的内存空间)极易广生00M问题(一种因内存不够导致的朋溃问 题),使用延迟加载技术后,同时加载进内存的化agment可能只有少数几个,可W节省大部 分的内存留给其他功能使用,同时又由于预加载技术,不会导致加载化agment的开销导致 的界面卡顿现象。
[0093] W上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发 明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括 在本发明的专利保护范围内。
【主权项】
1. 一种加载Fragment的方法,其特征在于,包括: 生成Fragment结点的树结构; 确定所述Fragment结点在所述树结构上的位置信息; 设置所述Fragment结点的加载状态信息; 根据所述Fragment结点的加载状态信息加载对应的子结点上的Fragment ; 卸载所述子结点对应的父结点或兄弟结点上的Fragment。2. 根据权利要求1所述加载Fragment的方法,其特征在于,生成Fragment结点的树结 构的步骤具体为: 启动程序,并初始化所述程序; 加载JSON描述文件; 根据所述JSON描述文件定义生成所述树结构。3. 根据权利要求1所述加载Fragment的方法,其特征在于,其中确定所述Fragment结 点在所述树结构上的位置信息的步骤具体为: 定义所述Fragment的关系组织格式; 使用JSON描述所述关系组织格式; 确定所述Fragment的子结点、父结点以及兄弟结点的位置信息。4. 根据权利要求1所述加载Fragment的方法,其特征在于,其中设置所述Fragment结 点的加载状态信息的步骤具体为: 关联所述Fragment到对应的名字,并设置所述Fragment的路径; 确定所述Fragment的上下文信息,并根据上下文信息设置不同Fragment之间的组织 调用关系; 设置所述Fragment为预加载、延迟加载、条件加载的其中一个。5. 根据权利要求1所述加载Fragment的方法,其特征在于,卸载所述子结点对应的父 结点或兄弟结点上的Fragment具体为:卸载标识为预加载、延迟加载、条件加载其中一个 的Fragment结点。6. 根据权利要求1所述加载Fragment的方法,其特征在于,其中根据所述Fragment结 点的加载状态信息加载对应的子结点上的Fragment的步骤包括: 预加载根结点对应的Fragment ; 根据子结点需要预加载的加载状态信息,预加载对应Fragment子结点上的Fragment ; 延迟加载除根结点外的其他结点对应的Fragment。7. -种加载Fragment的终端,其特征在于,包括: 树结构单元,用于生成Fragment结点的树结构; 位置单元,用于确定所述Fragment结点在所述树结构上的位置信息; 元信息单元,用于设置所述Fragment结点的加载状态信息; 加载单元,用于根据所述Fragment结点的加载状态信息加载对应的子结点上的 Fragment ; 卸载单元,用于卸载所述子结点对应的父结点或兄弟结点上的Fragment。8. 根据权利要求7所述加载Fragment的终端,其特征在于,所述树结构单元包括: 程序启动子单元,用于启动程序,并初始化所述程序; 树结构生成子单元,用于加载JSON描述文件,并根据所述JSON描述文件定义生成所述 树结构。9. 根据权利要求7所述加载Fragment的终端,其特征在于,所述位置单元包括: 格式定义子单元,用于定义所述Fragment的关系组织格式; 格式描述子单元,用于使用JSON描述所述关系组织格式; 定位子单元,用于确定所述Fragment的子结点、父结点以及兄弟结点的位置信息。10. 根据权利要求7所述加载Fragment的终端,其特征在于,所述元信息单元包括: 键值对子单元,用于关联所述Fragment到对应的名字,并设置所述Fragment的路径; Context子单元,用于确定所述Fragment的上下文信息,并根据上下文信息设置不同 Fragment之间的组织调用关系; 元信息设置子单元,用于设置所述Fragment为预加载、延迟加载、条件加载的其中一 个。
【专利摘要】本发明提供一种加载Fragment的方法及终端,其中方法包括:生成Fragment结点的树结构;确定所述Fragment结点在所述树结构上的位置信息;设置所述Fragment结点的加载状态信息;根据所述Fragment结点的加载状态信息加载对应的子结点上的Fragment;卸载所述子结点对应的父结点或兄弟结点上的Fragment。通过上述方式,本发明可降低对内存的占用,被及时释放多余的内存,提高终端设备的I/O效率,同时也使得复杂程序在低端设备上运行称为可能。
【IPC分类】G06F17/30, G06F9/445
【公开号】CN104881305
【申请号】CN201510241016
【发明人】刘德建, 方振华, 李上杰, 李洋
【申请人】福建天晴数码有限公司
【公开日】2015年9月2日
【申请日】2015年5月13日
转载请注明原文地址:https://www.famiwei.com/read-8138770.html

最新回复(0)