字符串的渲染方法、装置、终端设备及计算机存储介质与流程

文档序号:22387939发布日期:2020-09-29 17:51阅读:95来源:国知局
字符串的渲染方法、装置、终端设备及计算机存储介质与流程

本发明实施例涉及数据处理技术领域,尤其涉及一种字符串的渲染方法、装置、终端设备及计算机存储介质。



背景技术:

通常,在android系统中对html文件进行渲染时,由于android系统不能直接全部解析整个html文件,导致html文件中的部分标签不能被显示出来,例如gif标签,进而导致该标签对应的内容无法显示,使得渲染错误。因此在渲染时,大多通过视图组件webview对html文件进行渲染。

然而,由于采用webview渲染时,需要加载html文件的页面资源,进而根据加载的页面资源进行渲染处理,以获得富文本的渲染结果并输出,导致渲染处理过程较慢,进而导致页面的展现速度较慢。



技术实现要素:

有鉴于此,本发明实施例提供一种字符串的渲染方法、装置、终端设备及计算机存储介质,以解决上述问题中的任一种。

根据本发明实施例的第一方面,提供了一种字符串的渲染方法,其包括:根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染。

根据本发明实施例的第二方面,提供了一种字符串的渲染装置,其包括:拆分模块,用于根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;渲染模块,用于根据所述多个子字符串,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染。

根据本发明实施例的第三方面,提供了一种终端设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的字符串的渲染方法对应的操作。

根据本发明实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的字符串的渲染方法。

根据本发明实施例提供的方案,通过根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串中分别包括的标签,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染,进而可以使用原生组件承载多个子字符串中的部分或全部,从而提高了渲染速度,避免了现有技术中出现的渲染错误或渲染速度慢的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本发明实施例一的一种字符串的渲染方法的步骤流程图;

图2为本发明实施例二的一种字符串的渲染方法的步骤流程图;

图3a为本发明实施例二的一种html文件的示意图;

图3b为本发明实施例二的一种标签分组结果的示意图;

图4为本发明实施例三的一种字符串的渲染装置的结构框图;

图5为本发明实施例四的一种终端设备的结构示意图。

具体实施方式

为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。

下面结合本发明实施例附图进一步说明本发明实施例具体实现。

实施例一

参照图1,示出了根据本发明实施例一的一种字符串的渲染方法的步骤流程图。

本实施例的方法包括以下步骤:

s102、根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串。

本实施例中,当需要展示某些内容时,大多会将展示的内容用字符串表示,然后通过智能终端等设备对字符串进行处理,从而在页面中展示字符串对应的内容。

例如,若展示的内容为html页面,则字符串即为html页面对应的字符串。字符串中可以包括可包括具有属性值的文字(属性值可以为颜色、字体、粗细、斜体等)、图片地址、视频地址、表格等内容,可以通过字符串中的标签标识文字的属性、图片的格式、视频、表格等。

本实施例中,以html页面对应的字符串为例,其中包括的标签为html标签,例如<p>、<body>、<canvas>等。通常,会通过双标签的方式使用html标签,双标签包括一个开始标签以及一个结束标签,标签对应的元素内容为开始标签到结束标签之间的所有字符串,例如字符串“<p>thisismyfirstparagraph.</p>”中,开始标签为<p>,结束标签为</p>,标签对应的元素为“thisismyfirstparagraph.”。当然,部分标签不存在结束标签,在实际使用时,本领域的技术人员可以根据经验准确地确定标签以及标签对应的元素,本实施例在此不再赘述。

当一个字符串中包括多个标签时,标签之间会存在层次关系,层次关系具体可以包括并列关系、嵌套关系等。为了保证正确地渲染效果,需要根据标签之间的层次关系确定需要进行拆分处理的字符串,从而可以保证拆分后得到的子字符串可以准确地拼合,以避免由于层次关系错误导致的子字符串拼合错误,进而导致渲染错误情况。

s104、根据所述多个子字符串,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染。

本实施例中,根据上述步骤可知,子字符串是根据标签进行划分的,则确定的子字符串中可以包括标签,由于标签用于指示其对应的元素的属性或类别等,因此标签以及其对应的元素不可拆分,则子字符串中还可以包括标签对应的元素。

由于标签可以指示元素的类型,例如通过标签指示文字的属性、通过标签指示要渲染的是图片、视频等,因此,可以通过子字符串中包括的标签,确定用于承载子字符串的视图组件。例如,若标签用于指示文字的属性,则可以确定承载该子字符串的视图组件为文本组件;若标签用于指示要渲染的为图片,则可以确定承载该子字符串的视图组件为视频组件等。本领域的技术人员可以根据需要,直接根据子字符串的标签确定承载子字符串的视图组件,本实施例在此不再赘述。当然,在其他实现方式中,也可以不通过标签而直接根据子字符串的所有内容,确定用于承载子字符串的视图组件,本实施例对此不进行限定。

本实施例中,确定承载子字符串的视图组件后,即可通过视图组件对多个子字符串进行渲染,具体渲染的步骤详见下述实施例。由于子字符串是通过拆分字符串得到的,因此完成了对多个子字符串的渲染即完成了对字符串的渲染。

本实施例提供的方案,通过根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串中分别包括的标签,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染,进而可以使用原生组件承载多个子字符串中的部分或全部,从而提高了渲染速度,避免了现有技术中出现的渲染错误或渲染速度慢的问题。

实施例二

参照图2,示出了根据本发明实施例二的一种字符串的渲染方法的步骤流程图。

本实施例以html文件为例,对字符串的渲染流程进行具体说明。

本实施例的方法包括以下步骤:

s202、获取html文件并从html文件中获取字符串。

本实施例中,所有的html文件中都包含<html>、<head>、<body>这三个标签,而待渲染的内容大多被<body>标签包含。则,本实施例中,获取<body>标签包含的元素即从html文件中获取字符串。

例如图3a所示,图3a示出了一个html文件,html文件中包括<html>、<head>、<body>、<meta>等标签。

具体地,本实施例中,可以通过任意适当的方式获取<body>标签包含的元素,例如可以通过正则匹配的方式获取,获取时使用的正则表达式可以为:<body(.*?)(/>|></body>|>)。当然,也可以通过其他方式获取<body>标签包含的元素,本实施例对此不进行限定。

s204、根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串。

具体地,若根据字符串中标签之间的层次关系,确定在所述字符串中标签不存在对应的父标签,则确定该标签所对应的字符串为需要进行拆分处理的字符串。通过不存在对应的父标签的标签,并确定该标签所对应的字符串为需要进行拆分处理的字符串,可以保证子字符串渲染后可以简单、准确地进行拼接,进而保证了字符串渲染的准确性。

本实施例中,确定标签所对应的字符串为需要进行拆分处理的字符串后,可以记录标签的位置,并在后续根据记录的位置对需要进行拆分处理的字符串进行拆分。

本实施例中,层次关系可以包括并列关系以及嵌套关系。存在并列关系的两个标签是指一个标签结束使用后另一个标签才开始使用,例如<h2></h2><p></p>。存在嵌套关系的两个标签是指一个标签的开始使用和结束使用均属于另一个标签的开始和结束范围内,例如,<div><h2></h2></div>。

具体地,存在并列关系的两个标签可以对应同一个父标签,或者多个嵌套关系的最外层标签之间存在并列关系,本实施例对此不进行限定。

若在所述字符串中,标签不存在对应的父标签,则确定该标签与除其之外的其他标签之间的关系包括并列关系,当然,还可以存在嵌入该标签中的子标签。确定标签不存在对应的父标签后,即可确定该标签对应的字符串为需要进行拆分处理的字符串。

具体地,针对嵌套关系下的多个标签,若根据字符串中标签之间的层次关系,确定在所述字符串中标签存在对应的父标签,则确定其与父标签之间的关系为嵌套关系,以及所述嵌套关系对应的最外层标签为不存在父标签的标签,并确定所述最外层标签所对应的字符串为需要进行拆分处理的字符串。

本实施例中,通过确定标签是否存在对应的父标签,可以确定标签是否被嵌入其他标签之中,从而在拆分时,保证嵌套关系对应的字符串的完整,进而保证了字符串渲染结果的准确性,不会出现由于嵌套关系的标签被拆分并被分别渲染导致组合时无法嵌套进而导致的渲染错误的情况。

另外,本实施例中,确定该标签对应的字符串为需要进行拆分处理的字符串包括:确定该标签以及该标签中插入的字符串为需要进行拆分处理的字符串。

例如,若字符串为“<h1>头部</><videosource="1.mp4"/>粗体<imgsrc="1.jpg"/>”,确定标签<h1>对应的字符串为需要进行拆分处理的字符串后,可以确定标签<h1>中插入的元素为“头部”,则拆分后得到的子字符串为“<h1>头部</>”。

将上述字符串按顺序全部拆分后,可以得到四个子字符串,分别为:<h1>头部</>、<videosource="1.mp4"/>、粗体、<imgsrc="1.jpg"/>。其中,由于上述步骤s202中获取字符串时,获取的是body标签下的字符串,则子字符串“粗体”为直接添加至body下的字符串。

本实施例中,在拆分时,必须确定拆分后的子字符串在拆分前的字符串中的位置顺序,从而可以在后续步骤中根据位置顺序渲染多个子字符串,避免由于顺序不一致导致的字符串渲染错误的情况。

s206、根据所述多个子字符串,确定视图组件为文本组件的子字符串。

具体地,可以将所有子字符串分为两组,一组为视图组件为文本组件的子字符串,另一组为由剩余的子字符串组成的、视图组件不为文本组件的子字符串。

具体可以参见图3b,图3b示出了标签分组结果。图3b为根据子字符串中的标签进行分组后得到的分组结果,并通过标签表示子字符串所在的分组。具体地,可以根据子字符串中的标签进行分组,将标签分为“文本组件textview支持的标签”以及“文本组件textview不支持的标签”共两组,其中“文本组件textview支持的标签”对应视图组件为文本组件的子字符串,“文本组件textview不支持的标签”对应视图组件不为文本组件的子字符串。若标签为“文本组件textview支持的标签”下的标签,则可以确定承载该标签所在的子字符串的视图组件为文本组件。

例如,上述步骤中拆分得到的四个子字符串分为两组后,视图组件为文本组件的子字符串包括:<h1>头部</>、粗体;视图组件为文本组件的子字符串包括:<videosource="1.mp4"/>、<imgsrc="1.jpg"/>。

s208、根据剩余的子字符串,确定用于承载对应子字符串的视图组件。

具体地,在确定视图组件时,可以根据子字符串中的标签确定,例如,如图3b所示,可以确定标签<img>对应的视图组件为imageview、标签<video>对应的视图组件为videoview、标签<gif>对应的视图组件为gifview。

由于文本组件默认支持一些文本例如“头部”、“粗体”等的渲染,通过步骤s206确定视图组件为文本组件的子字符串,再通过步骤s208确定剩余的子字符串对应的视图组件,可以减少工作量。

本实施例中,为了提高渲染速度,在根据剩余的子字符串,确定用于承载对应子字符串的视图组件时,原生组件的优先级高于非原生组件的优先级。

本实施例中,原生组件为系统(如android系统)中原生的视图组件,非原生组件为在原生组件的基础上进行开发后得到的视图组件。非原生组件可以由本领域的技术人员自行根据子字符串进行开发,也可以通过开源方式获取,本实施例对此不进行限定。

s210、将承载了所述子字符串的多个所述视图组件,按照拆分顺序渲染至布局容器中,以对所述多个子字符串进行渲染。

本实施例中,不同的视图组件包括各自自定义的处理要求,在通过视图组件承载子字符串时,不同的视图组件会根据各自自定义的要求处理子字符串,本领域的技术人员可根据经验进行设置或修改,本实施例在此不再赘述。

本实施例中,布局容器可以通过recyclerview、viewpager、listview等实现。将视图组件按照拆分顺序渲染至布局容器中,即按照拆分顺序将视图组件填充至布局容器对应的位置上。

例如,recyclerview实现布局容器时,上述四个字符串按照拆分顺序对应的视图组件为textview1、videoview、textview2、imageview,其中,textview1用于承载字符串“<h1>头部</>”、videoview用于承载字符串“<videosource="1.mp4"/>”、textview2用于承载字符串“粗体”、imageview用于承载字符串“<imgsrc="1.jpg"/>”。则recyclerview中的第一个列表项可以用textview1填充、第二个列表项可以用videoview填充、第三个列表项可以用textview2填充、第四个列表项可以用imageview填充。填充完成后即可通过recyclerview将四个子字符串的渲染结果组合,进而实现字符串的渲染。

本实施例提供的方案,通过先确定视图组件为文本组件的子字符串,再确定剩余的子字符串对应的视图组件,可以减少工作量,并在确定剩余的子字符串对应的视图组件时,优先考虑原生组件,可以提高渲染速度。

另外需要说明的是,由于与其他页面相比,h5页面中包括的页面数量较多,导致与通过webview渲染其他页面相比,通过webview渲染h5页面时,渲染速度更慢,进而极大地降低了用户体验,而通过本实施例提供的方案渲染h5页面时,极大地提高了渲染速度,进而提高页面展示的速度,并保证了渲染成功的概率,使得用户体验较好。

本实施例的字符串的渲染方法可以由任意适当的具有数据处理能力的终端设备执行,包括但不限于:移动终端(如平板电脑、手机等)和pc机。

实施例三

参照图4,示出了根据本发明实施例三的一种字符串的渲染装置的结构框图。

图4所示的字符串的渲染装置包括:拆分模块302、渲染模块304。

拆分模块302,用于根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串。

渲染模块304,用于根据所述多个子字符串,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染。

在一种可选的实施方式中,所述拆分模块302包括:确定模块,用于若根据字符串中标签之间的层次关系,确定在所述字符串中标签不存在对应的父标签,则确定该标签所对应的字符串为需要进行拆分处理的字符串。

在一种可选的实施方式中,所述拆分模块302包括:视图组件确定模块,用于确定视图组件为文本组件的子字符串,并根据剩余的子字符串,确定用于承载对应子字符串的视图组件。

在一种可选的实施方式中,所述渲染模块304包括:顺序渲染模块,用于将承载了所述子字符串的多个所述视图组件,按照拆分顺序渲染至布局容器中,以对所述多个子字符串进行渲染。

本发明实施例提供的方案,通过根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串中分别包括的标签,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染,进而可以使用原生组件承载多个子字符串中的部分或全部,从而提高了渲染速度,避免了现有技术中出现的渲染错误或渲染速度慢的问题。

实施例四

一种终端设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的字符串的渲染方法对应的操作。

具体地,参照图5,示出了根据本发明实施例四的一种终端设备的结构示意图,本发明具体实施例并不对终端设备的具体实现做限定。

如图5所示,该终端设备可以包括:处理器(processor)402、通信接口(communicationsinterface)404、存储器(memory)406、以及通信总线408。

其中:

处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。

通信接口404,用于与其它终端设备或服务器进行通信。

处理器402,用于执行程序410,具体可以执行上述字符串的渲染方法实施例中的相关步骤。

具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。

处理器402可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。终端设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。

存储器406,用于存放程序410。存储器406可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

程序410具体可以用于使得处理器402执行以下操作:根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染。

在一种可选的实施方式中,所述根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串包括:若根据字符串中标签之间的层次关系,确定在所述字符串中标签不存在对应的父标签,则确定该标签所对应的字符串为需要进行拆分处理的字符串。

在一种可选的实施方式中,所述若根据字符串中标签之间的层次关系,确定在所述字符串中标签不存在对应的父标签,则确定该标签所对应的字符串为需要进行拆分处理的字符串包括:若根据字符串中标签之间的层次关系,确定在所述字符串中标签存在对应的父标签,则确定其与父标签之间的关系为嵌套关系,以及所述嵌套关系对应的最外层标签为不存在父标签的标签,并确定所述最外层标签所对应的字符串为需要进行拆分处理的字符串。

在一种可选的实施方式中,所述确定该标签对应的字符串为需要进行拆分处理的字符串包括:确定该标签以及该标签对应的元素为需要进行拆分处理的字符串。

在一种可选的实施方式中,所述根据所述多个子字符串,确定用于承载对应子字符串的视图组件包括:确定视图组件为文本组件的子字符串,并根据剩余的子字符串,确定用于承载对应子字符串的视图组件。

在一种可选的实施方式中,根据剩余的子字符串,确定用于承载对应子字符串的视图组件时,原生组件的优先级高于非原生组件的优先级。

在一种可选的实施方式中,所述根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染包括:将承载了所述子字符串的多个所述视图组件,按照拆分顺序渲染至布局容器中,以对所述多个子字符串进行渲染。

程序410中各步骤的具体实现可以参见上述字符串的渲染方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。

本实施例的终端设备,通过根据字符串中标签之间的层次关系,确定需要进行拆分处理的字符串,并对需要进行拆分处理的字符串进行拆分,得到多个子字符串;根据所述多个子字符串中分别包括的标签,确定用于承载对应子字符串的视图组件,并根据承载所述子字符串后的多个所述视图组件,对所述多个子字符串进行渲染,进而可以使用原生组件承载多个子字符串中的部分或全部,从而提高了渲染速度,避免了现有技术中出现的渲染错误或渲染速度慢的问题。

需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。

上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如cdrom、ram、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如asic或fpga)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,ram、rom、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的字符串的渲染方法。此外,当通用计算机访问用于实现在此示出的字符串的渲染方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的字符串的渲染方法的专用计算机。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。

以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关技术领域的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1