CN106293732A - 资源加载方法和装置 - Google Patents
资源加载方法和装置 Download PDFInfo
- Publication number
- CN106293732A CN106293732A CN201610638942.1A CN201610638942A CN106293732A CN 106293732 A CN106293732 A CN 106293732A CN 201610638942 A CN201610638942 A CN 201610638942A CN 106293732 A CN106293732 A CN 106293732A
- Authority
- CN
- China
- Prior art keywords
- resource
- module
- predetermined
- threshold
- divided
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种资源加载方法和装置。该方法包括:获取预定模块对应的模块资源,其中,模块资源仅被预定模块加载,每个模块对应的模块资源仅被该模块加载;加载预定模块对应的用户界面UI资源,其中,UI资源至少包括模块资源。通过本发明,解决了现有技术中某一个模块UI资源加载需要同时加载多个模块的模块资源造成内存浪费的技术问题。
Description
技术领域
本发明涉及用户界面领域,具体而言,涉及一种资源加载方法和装置。
背景技术
UI资源是一种特殊的美术资源,其负责游戏与玩家的交互,是最直接影响游戏运行性能体验和内存占用的资源。其管理和优化在各个手游项目中享有“公认的大坑”的美誉。其相对于其他美术资源主要有以下特点:对运行时加载性能要求较高、资源数量多而尺寸小。
目前为了优化UI资源的加载速度,普遍采用的方式是将同一个功能模块所用到的所有资源压缩在一张plist图片中,这样在加载UI资源时只需将这张plist图片读取到内存中,该功能模块需要用到的UI资源都可以直接从内存中读取,这样就极大的提高了UI界面的加载速度,从而消除玩家在该功能模块下切换界面时的卡顿感。
但是由于移动端内存资源非常有限,这种方法对UI资源管理提出了很高要求。例如,如果一个功能模块的UI资源管理不善,运行该功能模块时可能需要从多个plist图片中获取UI资源,那么这将造成巨大的内存浪费。以2048×2048的png图片为例,其加载进内存占用的空间是16M,而cocos2d-x加载png图时会通过一个临时变量解析出纹理,因此其加载时的内存峰值将达到32M,对于一个UI资源管理不善的功能模块,它将同时加载多张plist文件,使内存瞬间消耗100M以上,造成了内存的巨大浪费。
针对相关技术中某一个模块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资源加载时只需要加载该模块对应的模块资源,这就达到了节约内存的技术效果,解决了相关技术中某一个模块UI资源加载需要同时加载多个模块的模块资源造成内存浪费的技术问题。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的资源加载方法的流程图;
图2是根据本发明实施例的开发时UI资源与运行时UI资源分离的示意图;
图3是根据本发明实施例的某一个模块UI资源加载的资源分类的示意图;
图4是根据本发明实施例的大图对plist布局的影响的示意图;
图5-1是根据本发明实施例的UI工程目录结构的示意图;
图5-2是根据本发明实施例的UI工程目录结构的示意图;
图6是根据本发明实施例的UI资源开发的流程图;
图7是根据本发明实施例的导出工具目录结构的示意图;
图8-1是根据本发明实施例的Json文件预加载字段自动化修改前的示意图;
图8-2是根据本发明实施例的Json文件预加载字段自动化修改后的示意图;
图9-1是根据本发明实施例的Json文件图片加载路径、模式自动化修改前的示意图;
图9-2是根据本发明实施例的Json文件图片加载路径、模式自动化修改后的示意图;
图10-1是根据本发明实施例的白名单的示意图;
图10-2是根据本发明实施例的黑名单的示意图;
图11是根据本发明实施例的Common图片和bg图片提取的流程图;
图12-1是使用现有技术方法时,某个场景的UI加载情况的示意图;
图12-2是根据本发明实施例的某个场景的UI加载情况的示意图;
图13是根据本发明实施例的资源加载装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
名词解释:
plist文件:plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,该功能在旧式的Mac OS中是由资源分支提供的。由于plist中存储的数据是抽象的,其采用的文件格式可以不止一种。
UI:用户界面,英文全称为User’s Interface。
本发明实施例提供了一种资源加载方法。
图1是根据本发明实施例的资源加载方法的流程图,如图1所示,该资源加载方法包括以下步骤:
步骤S102,获取预定模块对应的模块资源,其中,模块资源仅被预定模块加载,每个模块对应的模块资源仅被该模块加载。
步骤S104,加载预定模块对应的用户界面UI资源,其中,UI资源至少包括模块资源。
每个模块都有对应的模块资源,每个模块在加载时,只能加载自身对应的模块资源,而不能加载其他模块对应的模块资源,解决了相关技术中某一个模块UI资源加载需要同时加载多个模块的模块资源造成内存浪费的技术问题,达到了节约内存的技术效果。
每个程序在开发UI时习惯差异可能很大,而引擎目录下的UI资源是经过优化过的遵守某种管理规范的资源,如果引擎目录下的UI资源是按照不同习惯开发出来的,则将造成UI资源管理的混乱。在本发明实施例中,开发时UI资源与运行时UI资源分离,具体地说,程序在开发某个UI界面时,UI工程目录的资源与最终引擎目录下的UI资源不同,从UI工程目录到引擎目录的UI资源需要按照统一的规则进行迁移,不遵守规则的UI资源无法进入到引擎目录下。在加载UI资源之前,将工程目录中的用于UI的资源按照预定规范导出到引擎目录中,得到引擎目录中的UI资源,其中,引擎目录以及引擎目录中的UI资源禁止被开发者修改。从开发目录向引擎目录迁移UI资源,可以借助导出工具完成,这样就可以保证引擎目录下的UI资源是统一且符合规范的,如图2所示,导出工具的具体作用将在后面详细介绍。
在本发明实施例中,每个模块UI资源独立。模块之间UI资源的独立是指,一个模块的不得从其他模块的plist中获取资源。主要有两方面规定,首先是开发界面的静态Json文件时,不可以加载别的模块的plist中的资源。其次是代码里不可以加载别的模块的plist中的内容。
因此,一个界面的UI应当只包括以下三种资源中的任意一种或多种:模块资源、公共资源和特殊资源。公共资源为能够被多个模块共同使用的资源,特殊资源为资源的属性超过第一阈值的资源。下面提到的Common资源即为公共资源,模块本身的plist资源即为模块资源,零散图片即为特殊资源。如图3所示,模块A加载的UI资源包括Common资源、A模块的plist、零散图片。
模块之间UI资源的独立,不仅可以避免前面提到的混乱引用plist造成的内存暴涨的问题,也为后续UI的进一步优化垫定了基础。
零散图片是一些不压入plist图中的图片,其中最主要的一类是bg文件夹中的大图,我们规定图片边长超过一定阈值,则该图片被称为大图,大图主要是一些背景图,这些背景图如果被压入plist中会严重影响plist图的布局,造成资源的浪费,如图4所示,图片1即为bg大图,图片1的边长远大于其他图片的边长,因此将图片1压入plist中之后严重影响了plist图的布局。在本发明实施例中,这些bg大图被单独放在bg文件夹中,以零散图片的形式加载。后面介绍的Common图片和bg图片自动提取工具会自动检测工程目录中的大图,并把它放入bg文件夹中。
实际开发中可根据实际情况,在遵守模块之间UI独立的原则的基础上进行灵活调整。当预定模块有多个时,假设第一模块是已有的预定模块,第二模块是新的预定模块。当第二模块与第一模块的资源有重合时,计算重合部分与第一模块的资源的比值,并将结果作为第一预设比例;判断第一预设比例是否大于或等于第三阈值;如果判断出第一预设比例大于或等于第三阈值,将第二模块作为第一模块的子界面进行开发,或新建工程对第二模块进行开发。
例如,假定A模块为已有的预定模块(第一模块),模块C为新的预定模块(第二模块),假定第三阈值为60%。模块C用到了A模块70%的资源(即第一预设比例为70%),剩下的30%是新资源或是其他模块的资源。由于第一预设比例70%大于第三阈值60%,这时可以将A模块和C模块合并,并将那30%的资源合并到A模块中,C模块作为A模块的一个子界面进行开发,也可以重新新建一个C模块自己的工程进行开发。
基于模块之间UI资源独立的原则,以Cocos Studio中的UI编辑工具为例,结合UI编辑工具的特点,本发明实施例提供了如图5-1和图5-2所示的UI工程目录结构。
每个文件夹是一个Cocos UI工程,通常对应一个功能模块,例如对应于游戏系统中的战斗模块、交易模块、人物模块、装备模块等等。每个文件夹内包含Export、Json、Resources目录,是Cocos UI工程的标准目录形式。Resources目录负责存储Cocos UI工程所需的所有资源,这些资源是一些零散的原始UI资源,开发时可根据需要任意拖进拖出。Json目录存储工程的子界面。Export目录是开发完成后某个界面后,利用CocosUI编辑器导出并存储的界面的Json文件。
在这样的工程目录结构下,开发者可按照如图6所示的步骤进行某个界面的开发。
UI开发者只需要把所需要的所有UI资源,从美术提供的原始资源池里拖进自己负责的UI工程目录的Resources下面,既可进行UI界面开发。开发完毕后,必须按Ctrl+E导出开发完毕的界面到Export文件夹中。最后运行Export_uiProject.bat既可完成从UI工程目录到引擎目录的一键导出。随着项目的推进,UI资源的迭代,必然产生新的Common资源,UI资源管理员可在一定时间,运行Common资源提取工具,自动按照UI资源的支持度,提取出Common资源。
导出工具和Common资源提取工具将在下面做详细介绍。
本发明实施例提供了3个管理工具,分别是(1)程序开发时使用的导出工具,(2)UI资源管理员使用的Common图片和bg图片自动提取工具,在本发明实施例中,UI资源主要指UI图片,Common资源主要指Common图片,因此,Common图片和bg图片自动提取工具即为上述Common资源提取工具。(3)辅助的扫描UI资源是否是动态加载的工具。下面分别对这3个管理工具进行详细说明。
(1)导出工具:
导出工具是程序开发UI时最常用的工具,它位于每个模块的UI工程的根目录下面。在如图7所示的标准的Cocos UI工程目录结构下面,使用者无需做任何配置,即可一键导出本工程的plist和json文件。
导出工具功能如下:以md5码为关键值,与Common文件夹和bg文件中的图片进行比对,将不属于Common文件夹和bg文件夹的图片压缩成plist图片;自动化修改Export文件夹中的Json文件。将界面的Json文件中的图片加载路径和加载方式进行自动化修改;将压缩后的plist图片和修改过的Json文件自动拷贝到引擎目录。
具体来说,导出工具在把某个UI工程内部的零散图片压成一张plist图片前,工具将扫描UI工程目录下Resources的所有图片,并扫描Common文件夹和bg文件夹目录下的所有图片,提取出图片的md5码,将UI工程的Resources图片与Common文件夹和bg文件夹中的图片进行比对,将重合的部分进行过滤,即过滤与Common文件夹和bg文件夹的交集。
自动化修改界面Json文件,主要是将Export文件夹中通Cocos UI编辑器导出的Json文件,修改为通过模块plist、Common文件夹和bg文件夹路径读取资源的Json文件。图8-1是根据本发明实施例的Json文件预加载字段自动化修改前的示意图;图8-2是根据本发明实施例的Json文件预加载字段自动化修改后的示意图。将图8-2与图8-1进行对比,能够看出,预加载字段发生了变化。图9-1是根据本发明实施例的Json文件图片加载路径、模式自动化修改前的示意图;图9-2是根据本发明实施例的Json文件图片加载路径、模式自动化修改后的示意图。将图9-2与图9-1进行对比,能够看出,加载路径“path”和模式“resourceType”都发生了变化。
下面对导出工具使用做具体说明。
导出工具的使用者为需要开发UI的程序员。使用方法如下:在符合本发明实施例的UI工程目录规范的情况下,导出工具可在每个Cocos UI的工程目录下面直接运行Export_uiProject.bat,实现一键导出。
如果工程目录结构有变,可在Export_uiProject.py中自行配置,具体路径可参看Export_uiProject.py的代码注释。
需要注意的是,使用导出工具前,需要在Cocos UI编辑器中使用Ctrl+E导出所开发的Json文件,到本工程目录下的Export文件夹中。注意,仅能选择导出当前画布选项,因为导出全部画布选项在目前版本的Cocos UI编辑器中存在bug。
(2)Common图片和bg图片自动提取工具
Common图片和bg图片自动提取工具是一个较为复杂的工具,因为在自动提取Common图片和bg图片时必须保证资源在移动时的鲁棒性。该工具的复杂主要体现在两个方面,首先是对UI资源的完全监控,其次是该工具是一个UI工程的全局性优化工具。
Common图片和bg图片自动提取工具的功能是自动从所有UI工程中提取出Common图片和bg图片。Common图片和bg图片自动提取工具的使用者为UI资源管理员。一般情况下,开发单独某个UI模块的程序员最好不要使用,因为该工具是针对UI工程全局优化的工具。
为了保证Common图片和bg图片自动提取工具的鲁棒性,该工具必须兼容某些UI资源管理不善的情况。这里将UI资源细分为3大类:通过Json文件静态加载的UI图片(约占90%以上);通过py代码动态加载的UI图片(占比较小);通过csv策划配置的UI图片(占比极少,本质上不属于UI资源)。
为了保证提取工具的鲁棒性,必须兼容上述三种情况下的UI资源。为此针对本发明实施例所应用于的游戏系统的UI管理,引入了一个辅助的资源扫描工具(即上述(3)辅助的扫描UI资源是否是动态加载的工具)和黑白名单机制。资源扫描工具和黑白名单机制是为了监控项目中用到的第二和第三类UI资源,及代码动态加载的UI资源和策划配置的UI资源。用白名单存储程序中动态加载的UI资源的名称和代码文件路径,用黑名单存储策划配置的图片资源,图10-1示出了白名单,图10-2示出了黑名单。例如,黑白名单本可以是两个Json文件,Json文件中存储的是一个以图片名称为Key值的字典,Value值是引用图片的文件路径,例如.csv文件表示策划的配表文件,.py表示程序的代码文件。扫描工具通过扫描代码文件夹和策划配表文件夹得出黑白名单,从而将代码中动态加载的UI资源和策划配置的UI资源完全监控起来,为提取工具运行的鲁棒性打下坚实基础。
在获取预定模块对应的模块资源之前,先将UI资源划分为模块资源、公共资源和特殊资源。其中,公共资源为能够被多个模块共同使用的资源,特殊资源为资源的属性超过第一阈值的资源,其余的则为模块资源。
将UI资源划分为公共资源的过程如下:按照预定的周期判断使用相同预定资源的模块数量是否超过第二阈值,在超过第二阈值的情况下,判断该资源是否是通过配置工具配置的,如果判断出该资源不是通过配置工具配置的,将预定资源划分为模块对应的公共资源。例如,以某张图片的md5码作为key值,统计该图片在各个UI工程中出现的次数作为图片的支持度,当图片的支持度大于某个阈值(第二阈值)时认为该图片是频繁使用的,即该图片是公共资源,把它移入Common文件夹,同时修改相应文件的加载路径和加载方式。
将UI资源划分为特殊资源的过程如下:判断资源的属性是否超过第一阈值,在超过第一阈值的情况下,将该资源划分为模块对应的特殊资源。以bg图片为例对上述过程进行说明。对于bg图片,则以图片的边长(资源的属性)作为衡量指标,如果图片的边长大于某个阈值(第一阈值)则认为该图片是大图,则放入bg文件夹,并对相应引用文件进行修改。
将UI资源划分为模块资源的过程如下:将既不属于公共资源又不属于特殊资源的UI资源划分为模块资源。
Common图片和bg图片自动提取工具具有全局性。该工具之所以是全局的是因为,每个UI工程的变动都可能影响到Common文件夹的变动,例如,设置的频繁度阈值为5,当A.png被4个工程使用时,有新建工程也要使用A.png,这时A.png将被移入Common文件夹,这时就需要对原来4个工程中的A.png的引用文件加以修改。
在将UI资源划分为公共资源之后,需要更新UI资源的加载路径。对于UI资源动态加载和UI资源静态加载的情况,更新UI资源的加载路径的方法是不同的,因此,首先需要判断UI资源是否为程序中动态加载的UI资源。如果判断出UI资源为程序中动态加载的UI资源,查找引用UI资源的文件,并对查找到的文件进行修改。如果判断出UI资源不是程序中动态加载的UI资源,判断UI资源是否是通过配置工具配置的;如果判断出UI资源不是通过配置工具配置的,对引用UI资源的所有工程的第一文件进行修改,其中,通过第一文件能够静态加载UI资源。
例如,当A.png被认为是频繁图片,被移入Common文件夹后,需要在每个工程中自动修改该图片的加载路径。这时将查询A.png是否在黑名单或白名单中,如果A.png在黑名单中,则将A.png移出Common文件夹,如果A.png在白名单中,则在白名单中查找引用A.png的文件,并对相应文件进行自动化修改。如果A.png既不在黑名单,也不在白名单中,则对引用A.png的所有工程的Json文件进行自动化修改,其修改过程类似导出工具。
Common图片和bg图片的提取流程如图11所示。如图11所示,该过程包括以下步骤:
步骤S1102,自动生成黑白名单。
步骤S1104,对图片的支持度进行计数。
步骤S1106,获取图片尺寸。
步骤S1108,判断图片尺寸是否大于或等于阈值。如果判断结果为是,执行步骤S1110;如果判断结果为否,结束。
步骤S1110,判断该图片是否在黑名单中。如果判断结果为是,结束;如果判断结果为否,执行步骤S1112。
步骤S1112,判断该图片是否在白名单中。如果判断结果为是,执行步骤S1114;如果判断结果为否,执行步骤S1116。
步骤S1114,修改代码。如果该图片在白名单中,则在白名单中查找引用该图片的文件,并对相应文件进行自动化修改。
步骤S1116,修改Json。如果该图片既不在黑名单,也不在白名单中,则对引用该图片的所有工程的Json文件进行自动化修改,其修改过程类似导出工具。
使用现有技术方法时,某个场景的UI加载情况如图12-1所示,使用本发明实施例所提供的方法时该场景的UI加载情况如图12-2所示。
加载一张2048×2048的png图片所用内存空间峰值是32M,那么使用现有技术方法加载该场景仅UI就耗费32×5=160M内存,而使用本发明实施例所提供的方法,bg图片提取时,将大图提取出去,使得plist图片布局合理没有浪费的空间,内存仅消耗32+8+2=42M。可见,使用本发明实施例所提供的方法,在加载UI场景时,耗费的内存大大减小。
UI管理和优化是手游项目耗费时间较长的优化问题,也是影响手游实际性能和体验的重要方面,有效的UI管理不仅使得UI加载时内存得到有效控制,同时也是UI进行其他优化的基础。在本发明实施例中,通过UI资源分为模块资源、公共资源和特殊资源三种,其中,公共资源为能够被多个模块共同使用的资源,特殊资源为资源的属性超过第一阈值的资源,模块资源仅被对应的模块加载,使得每个模块UI资源独立,避免了现有技术中混乱引用plist造成的内存暴涨的问题,为UI进行进一步优化奠定了基础。
根据本发明实施例,还提供了一种资源加载装置。该资源加载装置能够实施上述资源加载方法。图13是根据本发明实施例的资源加载装置的示意图。如图13所示,该装置包括获取单元10和加载单元20。
获取单元10,用于获取预定模块对应的模块资源,其中,模块资源仅被预定模块加载,每个模块对应的模块资源仅被该模块加载。
加载单元20,用于加载预定模块对应的用户界面UI资源,其中,UI资源至少包括模块资源。
可选地,UI资源还包括以下至少之一:公共资源、特殊资源,其中,公共资源为能够被多个模块共同使用的资源,特殊资源为资源的属性超过第一阈值的资源。
可选地,装置还包括划分单元。划分单元,用于在所述获取单元10获取预定模块对应的模块资源之前,将UI资源划分为模块资源、公共资源和特殊资源。
可选地,划分单元包括第一划分子单元、第二划分子单元和第三划分子单元。第一划分子单元,用于按照预定的周期判断使用相同预定资源的模块数量是否超过第二阈值,在超过第二阈值的情况下,将预定资源划分为模块对应的公共资源。第二划分子单元,用于判断资源的属性是否超过第一阈值,在超过第一阈值的情况下,将该资源划分为模块对应的特殊资源。第三划分子单元,用于将既不属于公共资源又不属于特殊资源的UI资源划分为模块资源。
可选地,装置还包括导出单元。导出单元,用于在加载UI资源之前,将工程目录中的用于UI的资源按照预定规范导出到引擎目录中,得到引擎目录中的UI资源,其中,引擎目录以及引擎目录中的UI资源禁止被开发者修改。
可选地,第一划分子单元包括第一判断模块、划分模块。第一判断模块,用于在按照预定的周期判断出使用相同预定资源的模块数量超过第二阈值的情况下,判断该资源是否是通过配置工具配置的。划分模块,用于当第一判断模块判断出该资源不是通过配置工具配置时,将该资源划分为模块对应的公共资源。
可选地,装置还包括更新单元。更新单元,用于在将UI资源划分为公共资源之后,更新UI资源的加载路径。
可选地,更新单元包括第二判断模块和查找模块。第二判断模块,用于判断UI资源是否为程序中动态加载的UI资源。查找模块,用于当第二判断模块判断出UI资源为程序中动态加载的UI资源时,查找引用UI资源的文件,并对查找到的文件进行修改。
可选地,更新单元包括第三判断模块、第四判断模块和修改模块。第三判断模块,用于判断UI资源是否为程序中动态加载的UI资源。第四判断模块,用于当第三判断模块判断出UI资源不是程序中动态加载的UI资源时,判断UI资源是否是通过配置工具配置的。修改模块,用于当第四判断模块判断出UI资源不是通过配置工具配置时,对引用UI资源的所有工程的第一文件进行修改,其中,通过第一文件能够静态加载UI资源。
可选地,预定模块包括第一模块和第二模块,第二模块与第一模块的资源有重合,装置还包括计算单元、判断单元、第一开发单元和第二开发单元。计算单元,用于计算重合部分与第一模块的资源的比值,并将结果作为第一预设比例。判断单元,用于判断第一预设比例是否大于或等于第三阈值。第一开发单元,用于当判断单元判断出第一预设比例大于或等于第三阈值时,将第二模块作为第一模块的子界面进行开发。第二开发单元,用于新建工程对第二模块进行开发。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (20)
1.一种资源加载方法,其特征在于,包括:
获取预定模块对应的模块资源,其中,所述模块资源仅被所述预定模块加载,每个模块对应的模块资源仅被该模块加载;
加载所述预定模块对应的用户界面UI资源,其中,所述UI资源至少包括所述模块资源。
2.根据权利要求1所述的方法,其特征在于,所述UI资源还包括以下至少之一:公共资源、特殊资源,其中,所述公共资源为能够被多个模块共同使用的资源,所述特殊资源为资源的属性超过第一阈值的资源。
3.根据权利要求2所述的方法,其特征在于,在获取预定模块对应的模块资源之前,所述方法还包括:将所述UI资源划分为所述模块资源、所述公共资源和所述特殊资源。
4.根据权利要求3所述的方法,其特征在于,
将所述UI资源划分为所述公共资源包括:按照预定的周期判断使用相同预定资源的模块数量是否超过第二阈值,在超过所述第二阈值的情况下,将所述预定资源划分为所述模块对应的所述公共资源;和/或,
将所述UI资源划分为所述特殊资源包括:判断资源的属性是否超过所述第一阈值,在超过所述第一阈值的情况下,将该资源划分为所述模块对应的特殊资源;和/或,
将所述UI资源划分为所述模块资源包括:将既不属于所述公共资源又不属于所述特殊资源的UI资源划分为所述模块资源。
5.根据权利要求1至3中任一项所述的方法,其特征在于,在加载所述UI资源之前,所述方法还包括:
将工程目录中的用于UI的资源按照预定规范导出到引擎目录中,得到所述引擎目录中的所述UI资源,其中,所述引擎目录以及所述引擎目录中的UI资源禁止被开发者修改。
6.根据权利要求4所述的方法,其特征在于,将所述预定资源划分为所述模块对应的所述公共资源包括:
在按照预定的周期判断出使用相同预定资源的模块数量超过所述第二阈值的情况下,判断该资源是否是通过配置工具配置的,
如果判断出该资源不是通过所述配置工具配置的,将该资源划分为所述模块对应的所述公共资源。
7.根据权利要求3所述的方法,其特征在于,在将所述UI资源划分为所述公共资源之后,所述方法还包括:
更新所述UI资源的加载路径。
8.根据权利要求7所述的方法,其特征在于,更新所述UI资源的加载路径包括:
判断所述UI资源是否为程序中动态加载的UI资源;
如果判断出所述UI资源为程序中动态加载的UI资源,查找引用所述UI资源的文件,并对查找到的文件进行修改。
9.根据权利要求7所述的方法,其特征在于,更新所述UI资源的加载路径包括:
判断所述UI资源是否为程序中动态加载的UI资源;
如果判断出所述UI资源不是程序中动态加载的UI资源,判断所述UI资源是否是通过配置工具配置的;
如果判断出所述UI资源不是通过所述配置工具配置的,对引用所述UI资源的所有工程的第一文件进行修改,其中,通过所述第一文件能够静态加载所述UI资源。
10.根据权利要求1所述的方法,其特征在于,所述预定模块包括第一模块和第二模块,所述第二模块与所述第一模块的资源有重合,所述方法还包括:
计算重合部分与所述第一模块的资源的比值,并将结果作为第一预设比例;
判断所述第一预设比例是否大于或等于第三阈值;
如果判断出所述第一预设比例大于或等于所述第三阈值,将所述第二模块作为所述第一模块的子界面进行开发,或
新建工程对所述第二模块进行开发。
11.一种资源加载装置,其特征在于,包括:
获取单元,用于获取预定模块对应的模块资源,其中,所述模块资源仅被所述预定模块加载,每个模块对应的模块资源仅被该模块加载;
加载单元,用于加载所述预定模块对应的用户界面UI资源,其中,所述UI资源至少包括所述模块资源。
12.根据权利要求11所述的装置,其特征在于,所述UI资源还包括以下至少之一:
公共资源、特殊资源,其中,所述公共资源为能够被多个模块共同使用的资源,所述特殊资源为资源的属性超过第一阈值的资源。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
划分单元,用于在所述获取单元获取预定模块对应的模块资源之前,将所述UI资源划分为所述模块资源、所述公共资源和所述特殊资源。
14.根据权利要求13所述的装置,其特征在于,所述划分单元包括:
第一划分子单元,用于按照预定的周期判断使用相同预定资源的模块数量是否超过第二阈值,在超过所述第二阈值的情况下,将所述预定资源划分为所述模块对应的所述公共资源;和/或,
第二划分子单元,用于判断资源的属性是否超过所述第一阈值,在超过所述第一阈值的情况下,将该资源划分为所述模块对应的特殊资源;和/或,
第三划分子单元,用于将既不属于所述公共资源又不属于所述特殊资源的UI资源划分为所述模块资源。
15.根据权利要求11至13中任一项所述的装置,其特征在于,所述装置还包括:
导出单元,用于在加载所述UI资源之前,将工程目录中的用于UI的资源按照预定规范导出到引擎目录中,得到所述引擎目录中的所述UI资源,其中,所述引擎目录以及所述引擎目录中的UI资源禁止被开发者修改。
16.根据权利要求14所述的装置,其特征在于,所述第一划分子单元包括:
第一判断模块,用于在按照预定的周期判断出使用相同预定资源的模块数量超过所述第二阈值的情况下,判断该资源是否是通过配置工具配置的,
划分模块,用于当所述第一判断模块判断出该资源不是通过所述配置工具配置时,将该资源划分为所述模块对应的所述公共资源。
17.根据权利要求13所述的装置,其特征在于,所述装置还包括:
更新单元,用于在将所述UI资源划分为所述公共资源之后,更新所述UI资源的加载路径。
18.根据权利要求17所述的装置,其特征在于,所述更新单元包括:
第二判断模块,用于判断所述UI资源是否为程序中动态加载的UI资源;
查找模块,用于当所述第二判断模块判断出所述UI资源为程序中动态加载的UI资源时,查找引用所述UI资源的文件,并对查找到的文件进行修改。
19.根据权利要求17所述的装置,其特征在于,所述更新单元包括:
第三判断模块,用于判断所述UI资源是否为程序中动态加载的UI资源;
第四判断模块,用于当所述第三判断模块判断出所述UI资源不是程序中动态加载的UI资源时,判断所述UI资源是否是通过配置工具配置的;
修改模块,用于当所述第四判断模块判断出所述UI资源不是通过所述配置工具配置时,对引用所述UI资源的所有工程的第一文件进行修改,其中,通过所述第一文件能够静态加载所述UI资源。
20.根据权利要求11所述的装置,其特征在于,所述预定模块包括第一模块和第二模块,所述第二模块与所述第一模块的资源有重合,所述装置还包括:
计算单元,用于计算重合部分与所述第一模块的资源的比值,并将结果作为第一预设比例;
判断单元,用于判断所述第一预设比例是否大于或等于第三阈值;
第一开发单元,用于当所述判断单元判断出所述第一预设比例大于或等于所述第三阈值时,将所述第二模块作为所述第一模块的子界面进行开发,或
第二开发单元,用于新建工程对所述第二模块进行开发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610638942.1A CN106293732B (zh) | 2016-08-03 | 2016-08-03 | 资源加载方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610638942.1A CN106293732B (zh) | 2016-08-03 | 2016-08-03 | 资源加载方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106293732A true CN106293732A (zh) | 2017-01-04 |
CN106293732B CN106293732B (zh) | 2019-09-10 |
Family
ID=57665905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610638942.1A Active CN106293732B (zh) | 2016-08-03 | 2016-08-03 | 资源加载方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293732B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279901A (zh) * | 2018-01-23 | 2018-07-13 | 网易(杭州)网络有限公司 | Ui文件编辑方法、装置、电子设备及存储介质 |
CN109344126A (zh) * | 2018-09-12 | 2019-02-15 | 网易(杭州)网络有限公司 | 贴图的处理方法、装置、存储介质和电子装置 |
CN111399931A (zh) * | 2018-12-29 | 2020-07-10 | 福建省天奕网络科技有限公司 | 一种LayaAir引擎导出UI资源的方法及终端 |
CN113076128A (zh) * | 2020-01-03 | 2021-07-06 | 北京猎户星空科技有限公司 | 用于机器人配置的方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030212982A1 (en) * | 2002-05-09 | 2003-11-13 | International Business Machines Corporation | Message compiler for internationalization of application programs |
US20140237443A1 (en) * | 2013-02-15 | 2014-08-21 | Oracle International Corporation | System and method for supporting intelligent design pattern automation |
CN104573066A (zh) * | 2015-01-26 | 2015-04-29 | 中国工商银行股份有限公司 | 页面复用方法及装置 |
CN105447902A (zh) * | 2016-01-15 | 2016-03-30 | 网易(杭州)网络有限公司 | 动画处理方法和装置 |
CN105786506A (zh) * | 2016-02-26 | 2016-07-20 | 珠海金山网络游戏科技有限公司 | 一种用户界面自动生成的系统及方法 |
-
2016
- 2016-08-03 CN CN201610638942.1A patent/CN106293732B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030212982A1 (en) * | 2002-05-09 | 2003-11-13 | International Business Machines Corporation | Message compiler for internationalization of application programs |
US20140237443A1 (en) * | 2013-02-15 | 2014-08-21 | Oracle International Corporation | System and method for supporting intelligent design pattern automation |
CN104573066A (zh) * | 2015-01-26 | 2015-04-29 | 中国工商银行股份有限公司 | 页面复用方法及装置 |
CN105447902A (zh) * | 2016-01-15 | 2016-03-30 | 网易(杭州)网络有限公司 | 动画处理方法和装置 |
CN105786506A (zh) * | 2016-02-26 | 2016-07-20 | 珠海金山网络游戏科技有限公司 | 一种用户界面自动生成的系统及方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279901A (zh) * | 2018-01-23 | 2018-07-13 | 网易(杭州)网络有限公司 | Ui文件编辑方法、装置、电子设备及存储介质 |
CN108279901B (zh) * | 2018-01-23 | 2021-07-13 | 网易(杭州)网络有限公司 | Ui文件编辑方法、装置、电子设备及存储介质 |
CN109344126A (zh) * | 2018-09-12 | 2019-02-15 | 网易(杭州)网络有限公司 | 贴图的处理方法、装置、存储介质和电子装置 |
CN109344126B (zh) * | 2018-09-12 | 2021-11-30 | 网易(杭州)网络有限公司 | 贴图的处理方法、装置、存储介质和电子装置 |
CN111399931A (zh) * | 2018-12-29 | 2020-07-10 | 福建省天奕网络科技有限公司 | 一种LayaAir引擎导出UI资源的方法及终端 |
CN111399931B (zh) * | 2018-12-29 | 2022-12-09 | 福建省天奕网络科技有限公司 | 一种LayaAir引擎导出UI资源的方法及终端 |
CN113076128A (zh) * | 2020-01-03 | 2021-07-06 | 北京猎户星空科技有限公司 | 用于机器人配置的方法、装置、电子设备及存储介质 |
CN113076128B (zh) * | 2020-01-03 | 2023-11-10 | 北京猎户星空科技有限公司 | 用于机器人配置的方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106293732B (zh) | 2019-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106293732A (zh) | 资源加载方法和装置 | |
CN110007902A (zh) | 业务处理流程配置的方法及装置 | |
CN111737800A (zh) | 图元选择方法、装置及电子设备 | |
CN109240567B (zh) | 一种信息显示方法、装置、存储介质及电子装置 | |
Arthur et al. | Finding all optimal solutions to the reserve site selection problem: formulation and computational analysis | |
CN104657396A (zh) | 数据迁移方法及装置 | |
CN109670767A (zh) | 工作流的处理方法、装置、终端设备及存储介质 | |
CN105511873A (zh) | 用户界面控件展示方法及装置 | |
JPH02264329A (ja) | プログラム自動生成装置 | |
CN106485328B (zh) | 信息处理系统及方法 | |
CN103135724B (zh) | 一种电源管理方法、装置及智能设备 | |
CN105743946A (zh) | 模板部署方法及装置 | |
CN106201533A (zh) | 应用卡片排序方法及装置 | |
CN106708941A (zh) | 电网多任务在线协同编辑方法 | |
CN104461662A (zh) | Unity3d骨骼动画插件SmoothMoves的加载优化方法 | |
CN107545036A (zh) | 客服机器人知识库建设方法、客服机器人及可读存储介质 | |
CN110941422B (zh) | 代码自动生成方法、代码生成器及可读存储介质 | |
CN106557416A (zh) | 软件云测试的实现方法和装置 | |
CN106648794A (zh) | 一种组件加载方法及装置 | |
CN114564855B (zh) | 基于fmea数据节点的关联关系的操作方法及电子设备 | |
CN111340914A (zh) | 地图生成方法及装置、存储介质和运载工具 | |
CN110278565A (zh) | 一种基站设计方法及装置 | |
CN115757083A (zh) | 一种分布式数据库检测方法及装置 | |
CN116467153A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN106933509A (zh) | 一种磁盘编号的处理方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |