一种字体加载方法、装置、终端及存储介质制造方法及图纸

技术编号:20622746 阅读:30 留言:0更新日期:2019-03-20 14:30
本发明专利技术实施例公开了一种字体加载方法、装置、终端及存储介质。该方法包括:将字体文件分解为至少两个子字体文件;通过至少两个子线程将各子字体文件并行转换为各字体承载集Typeface;将各字体承载集Typeface合并得到总字体承载集,并将总字体承载集加载至字体映射表SystemFontMap中。本发明专利技术实施例的技术方案,解决了非系统字体文件加载速度较慢而导致应用程序无响应的问题,使得应用程序可以快速加载全部的系统字体文件和非系统字体文件,以便同时兼顾响应速度和各种字体的显示效果。

A font loading method, device, terminal and storage medium

The embodiment of the invention discloses a font loading method, device, terminal and storage medium. The method includes: decomposing the font file into at least two sub-font files; converting each sub-font file into each font bearing set Typeface in parallel through at least two sub-threads; merging each font bearing set Typeface to get the total font bearing set, and loading the total font bearing set into the font mapping table System FontMap. The technical scheme of the embodiment of the present invention solves the problem that the slow loading speed of the non-system font file causes the application program to be unresponsive, so that the application program can quickly load all the system font files and non-system font files, so as to take into account both the response speed and the display effect of various fonts.

【技术实现步骤摘要】
一种字体加载方法、装置、终端及存储介质
本专利技术实施例涉及计算机应用技术,尤其涉及一种字体加载方法、装置、终端及存储介质。
技术介绍
安卓应用程序(AndroidApplication)在首次启动的过程中会加载非系统字体,其需要将字体文件初始化以转化为字体承载集(Typeface)后,方可供应用程序的逻辑层读取使用。当字体文件过大时,加载过程较为耗时,使得应用程序的启动速度较慢,容易出现应用程序无响应(ApplicationNotResponding,ANR)的现象。现有技术中通常采用压缩字体的方式以减小字体的体积,例如剔除倾斜字体(Italic)和粗壮字体(Bold),只保留常规字体(Regular)等,进而加快字体的加载速度。但是,上述方案使得一些界面的显示效果较差,影响了用户的体验,无法同时兼顾应用程序的响应速度和显示效果。
技术实现思路
本专利技术实施例提供了一种字体加载方法、装置、终端及存储介质,解决了非系统字体加载速度较慢而导致ANR问题,使得应用程序可以同时兼顾响应速度和显示效果。第一方面,本专利技术实施例提供了一种字体加载方法,可以包括:将字体文件分解为至少两个子字体文件;通过至少两个子线程将各子字体文件并行转换为各字体承载集Typeface;将各字体承载集Typeface合并得到总字体承载集,并将总字体承载集加载至字体映射表SystemFontMap中。可选的,将字体文件分解为至少两个子字体文件,可以包括:以英文字母a-z作为类型标识,基于预设的聚类算法将字体文件分解为至少两个子字体文件。可选的,以英文字母a-z作为类型标识,基于预设的聚类算法将字体文件分解为至少两个子字体文件,可以包括:创建以英文字母a-z为类型标识的各空字符集,以及分别与各空字符集匹配的相似矩阵Ai,其中相似矩阵Ai是与以索引为i的英文字母为类型标识的空字符集匹配,i取0-25的正整数;建立对角线长度为字体文件的长度的单位矩阵AT;根据字体文件中各字符的类型标识,确定与各字符分别对应的相似矩阵Ai,并根据如下公式确定特征向量vi:vi=AiAT;基于特征向量vi将字体文件中各字符分解至各空字符集中,将得到的各空字符集作为各子字体文件。可选的,将各字体承载集Typeface合并得到总字体承载集,可以包括:建立用于存储各字体承载集Typeface的第一数组,其中,第一数组的长度是字体承载集Typeface的个数;创建以两个相邻英文字母为对角线元素的对角矩阵L;基于第一数组和对角矩阵L将各字体承载集Typeface进行结构化合并,得到总字体承载集。可选的,将各字体承载集Typeface进行结构化合并,得到总字体承载集,可以包括:建立用于存储总字体承载集的第二数组,其中,第二数组的长度是字体文件的长度;L[j]表示对角矩阵L中索引为j的元素,将j初始化为0;以第一数组的首个字体承载集Typeface作为当前元素,根据当前元素的首字母α和下一个元素的首字母β组成二元转置矩阵判断m×L[j]=0是否成立;若是,则将当前元素拷贝至第二数组中;否则,将下一个元素更新为当前元素,返回执行根据当前元素的首字母α和下一个元素的首字母β组成二元转置矩阵m的操作,直至m×L[j]=0成立;将j+1的结果更新为j,返回执行以第一数组的首个字体承载集Typeface作为当前元素的操作,直至j=26,并以第二数组存储的元素作为总字体承载集。可选的,通过至少两个子线程将各所述子字体文件并行转换为各字体承载集Typeface,可以包括:根据已创建的线程池,得到至少两个子线程;在各子线程中基于预设的字符编码标准将各子字体文件并行转换为各字体承载集Typeface。可选的,所述方法还可以包括:根据线程池的构建算法创建线程池ThreadPool26,其中,构建算法包括:ThreadPool26=2core+k;其中,core表示线程池核心数且取值2或是4,K表示闲置线程数;当core=2时,k=22;当core=4时,k=10。第二方面,本专利技术实施例还提供了一种字体加载装置,该装置可以包括:字体文件分解模块,用于将字体文件分解为至少两个子字体文件;子字体文件转换模块,用于通过至少两个子线程将各子字体文件并行转换为各字体承载集Typeface;各字体承载集合并模块,用于将各字体承载集Typeface合并得到总字体承载集,并将总字体承载集加载至字体映射表SystemFontMap中。第三方面,本专利技术实施例还提供了一种终端,该终端可以包括:一个或多个处理器;存储器,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本专利技术任意实施例所提供的字体加载方法。第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本专利技术任意实施例所提供的字体加载方法。本专利技术实施例的技术方案,通过将字体文件分解为至少两个子字体文件以减小单个字体文件的体积;通过至少两个子线程将各子字体文件并行转换为各字体承载集Typeface,各子字体文件同时转换的方式从整体上缩短了子字体文件的转换时间;将各字体承载集Typeface合并得到总字体承载集,并将总字体承载集加载至字体映射表SystemFontMap中,以缩短业务逻辑层的读取时间。上述技术方案解决了非系统字体文件加载速度较慢而导致应用程序无响应的问题,使得应用程序可以快速加载全部的系统字体文件和非系统字体文件,以便同时兼顾响应速度和各种字体的显示效果。附图说明图1是本专利技术实施例一中的一种字体加载方法的流程图;图2是本专利技术实施例一中的一种字体加载方法的示意图;图3是本专利技术实施例二中的一种字体加载方法的流程图;图4是本专利技术实施例三中的一种字体加载方法中的流程图;图5是本专利技术实施例四中的一种字体加载装置的结构框图;图6是本专利技术实施例五中的一种终端的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。实施例一图1是本专利技术实施例一中提供的一种字体加载方法的流程图。本实施例可适用于安卓应用程序中字体文件加载的情况,尤其适合于安卓应用程序中较大的非系统字体文件加载的情况。该方法可以由本专利技术实施例提供的字体加载装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在各种用户终端或服务器上。参见图1,本专利技术实施例的方法具体包括如下步骤:S110、将字体文件分解为至少两个子字体文件。其中,Android系统中的字体文件通常以.TTF格式或是.OTF格式存储,可以包括两种字库:postscript汉字库和truetype字库。其中,非系统字体字库主要采用postscript汉字库,例如倾斜字体(Italic)、粗壮字体(Bold)等系统字体;系统字体字库主要采用采用truetype字库,例如西符字体、符号字体、中日韩等非系统字体。相较于truetype字库,postscript汉字库使用较为方便,但是由于汉字字符较多,在整个字库中占据的比重较大。而系统字体字库中的系统字体文件是在Android系本文档来自技高网...

【技术保护点】
1.一种字体加载方法,其特征在于,包括:将字体文件分解为至少两个子字体文件;通过至少两个子线程将各所述子字体文件并行转换为各字体承载集Typeface;将各所述字体承载集Typeface合并得到总字体承载集,并将所述总字体承载集加载至字体映射表SystemFontMap中。

【技术特征摘要】
1.一种字体加载方法,其特征在于,包括:将字体文件分解为至少两个子字体文件;通过至少两个子线程将各所述子字体文件并行转换为各字体承载集Typeface;将各所述字体承载集Typeface合并得到总字体承载集,并将所述总字体承载集加载至字体映射表SystemFontMap中。2.根据权利要求1所述的方法,其特征在于,所述将字体文件分解为至少两个子字体文件,包括:以英文字母a-z作为类型标识,基于预设的聚类算法将所述字体文件分解为至少两个所述子字体文件。3.根据权利要求2所述的方法,其特征在于,所述以英文字母a-z作为类型标识,基于预设的聚类算法将所述字体文件分解为至少两个所述子字体文件,包括:创建以英文字母a-z为类型标识的各空字符集,以及分别与各所述空字符集匹配的相似矩阵Ai,其中相似矩阵Ai是与以索引为i的英文字母为类型标识的空字符集匹配,i取0-25的正整数;建立对角线长度为所述字体文件的长度的单位矩阵AT;根据所述字体文件中各字符的类型标识,确定与各所述字符分别对应的所述相似矩阵Ai,并根据如下公式确定特征向量vi:vi=AiAT;基于所述特征向量vi将所述字体文件中各所述字符分解至各所述空字符集中,将得到的各空字符集作为各子字体文件。4.根据权利要求2所述的方法,其特征在于,所述将各所述字体承载集Typeface合并得到总字体承载集,包括:建立用于存储各所述字体承载集Typeface的第一数组,其中,所述第一数组的长度是所述字体承载集Typeface的个数;创建以两个相邻英文字母为对角线元素的对角矩阵L;基于所述第一数组和所述对角矩阵L将各所述字体承载集Typeface进行结构化合并,得到所述总字体承载集。5.根据权利要求4所述的方法,其特征在于,将各所述字体承载集Typeface进行结构化合并,得到所述总字体承载集,包括:建立用于存储所述总字体承载集的第二数组,其中,所述第二数组的长度是所述字体文件的长度;L[j]表示对角矩阵L中索引为j的元素,将j初始化为0;以所述第一数组的首...

【专利技术属性】
技术研发人员:尹成
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1