文本显示方法及装置与流程

文档序号:12119335阅读:222来源:国知局
文本显示方法及装置与流程

本发明涉及计算机技术领域,更具体地,涉及一种文本显示方法及装置。



背景技术:

随着移动终端的普及,在移动终端上阅读文本是人们使用移动终端的一个重要习惯。因此,终端上文本的显示是个重要的技术问题。现有的文本显示方法主要是先通过文件读取把需要显示的内容直接加载到字符串中,然后通过Textview控件将字符串中的所有数据显示到界面上。

在实现本发明的过程中,发现现有技术至少存在以下问题:由于当文件较大时,无论是将文件内容读取到字符串中,还是通过TextView控件对字符串数据进行显示都会直接导致内存不足。另外,还会导致读取速度很慢。因此,文本显示时的效率很低。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的方法及装置。

根据本发明的一方面,提供了一种文本显示方法,该方法包括:

通过ListView控件加载预设数量的TextView控件;

获取每个TextView控件对应的页数据;

基于预设数量TextView控件及对应的页数据,对文本进行显示。

根据本发明的另一方面,提供了一种文本显示装置,该装置包括:

加载模块,用于通过ListView控件加载预设数量的TextView控件;

获取模块,用于获取每个TextView控件对应的页数据;

第一显示模块,用于基于预设数量TextView控件及对应的页数据,对文本进行显示。

本申请提出的技术方案带来的有益效果是:

通过ListView控件加载预设数量的TextView控件,获取每个TextView控件对应的页数据,基于预设数量TextView控件及对应的页数据,对文本进行显示。由于通过ListView控件下的多个TextView控件对文本进行显示,从而避免了通过一个TextView控件加载过多文本时加载速度较慢的问题。另外,由于是基于ListView控件显示文本数据,即每次加载文本数据时都是加载一屏的部分数据,从而避免了加载过多数据导致内存不足的问题。因此,文本显示的效率较高。

附图说明

图1为本发明实施例的一种文本显示方法的流程示意图;

图2为本发明实施例的一种文本显示方法的流程示意图;

图3为本发明实施例的一种文本显示装置的结构示意图;

图4为本发明实施例的一种文本显示装置的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

随着移动终端的普及,在移动终端上阅读文本是人们使用移动终端的一个重要习惯。因此,终端上文本的显示是个重要的技术问题。现有的文本显示方法主要是先通过文件读取把需要显示的内容直接加载到字符串中,然后通过Textview控件将字符串中的所有数据显示到界面上。由于当文件较大时,无论是将文件内容读取到字符串中,还是通过TextView控件对字符串数据进行显示都会直接导致内存不足。另外,还会导致读取速度很慢。因此,文本显示时的效率很低。

针对上述问题,本实施例提供了一种文本显示方法。在执行本实施例及后续实施例对应的文本显示方法之前,可以对需要读取的文件进行分页,本实施例及后续实施例对此不作具体限定。由于android系统给每个应用所能使用的内存大小有限制,如果对于一个非常大的文件(比如几百兆的文件)程序会直接挂掉,并显示内存不足。即使增大可使用的内存,但是直接加载大文件时,速度也非常慢。因此,为了避免内存不足和加载速度慢的问题,可对文本文件进行分页,本实施例对此不作具体限定。

在对文本文件进行分页前,可先确定每页的大小。为了便于说明,以每页固定的字节数为PAGE_SIZE(这个数值可以外部设置)。相应地,页数就是PAGES=FILE_SIZE/PAGE_SIZE,即文件总字节数除以每页大小来获取总页数。其中,文件总字节数可以通过RandomAccessFile来获取,RandomAccessFile是java提供对文件进行随机位置读写的类。具体地,可创建一个RandomAccessFile对象,用文件的路径作为参数传入,然后调用其length()方法获取总字节数FILE_SIZE,本实施例对此不作具体限定。

由于就算分页好了,但当后续页数加载较多时,内存的消耗会越来越大,到最后还是会出现内存不足。因此,可利用LRU(Less Recently Use,最近最少使用算法)算法和软引用,来对页数据进行加载,本实施例对此不作具体限定。其中,LRU算法可简单理解为最近用的数据为重要数据,从而需要保留。相反,很久没有使用到的数据则需要释放留出空间。对于软引用,在java中当一个对象使用了软引用之后,只有当系统内存不足时才会对其进行回收。

另外,android中在使用LRU算法时,有专门的工具类LrcCache类,LrcCache是以键值来存储对象的。在这里首先用当前页的页码作为键,当前页码对应的页数据作为值进行存储。需要说明的是,使用LrcCache还需要重写其sizeOf方法和entryRemoved方法。sizeOf用来获取每个页的大小,通过sizeOf可获取当前页的字节数,即PAGE_SIZE。entryRemoved表示当LrcCache内部存储数据超过缓存大小时,被释放的最近不用的数据会被存储至软引用中。

需要说明的是,由于软引用对象一次只能存储一个对象,从而需要通过一个数据结构来存储所有页数据。在本实施例及后续实施例中,采用android提供的稀松数组SparseArray来存储。其中,稀松数组有着比HashMap更好的性能。稀松数组中存储软引用String对象,即每个页数据的软引用对象。稀松数组SparseArray具体可以表示为SparseArray<SoftReference<String>>。

另外,本实施例及后续实施例还提供了一个封装好的三级缓存接口以读取页数据,本实施例及后续实施例对此不作具体限定。具体地,可内部定义一个获取page数据的方法,如getPage。getPage接受一个页码作为参数,并返回当前页的数据。

基于上述内容,参见图1,该文本显示方法流程包括:101、通过ListView控件加载预设数量的TextView控件;102、获取每个TextView控件对应的页数据;103、基于预设数量TextView控件及对应的页数据,对文本进行显示。

本发明实施例提供的方法,通过ListView控件加载预设数量的TextView控件,获取每个TextView控件对应的页数据,基于预设数量TextView控件及对应的页数据,对文本进行显示。由于通过ListView控件下的多个TextView控件对文本进行显示,从而避免了通过一个TextView控件加载过多文本时加载速度较慢的问题。另外,由于是基于ListView控件显示文本数据,即每次加载文本数据时都是加载一屏的部分数据,从而避免了加载过多数据导致内存不足的问题。因此,文本显示的效率较高。

作为一种可选实施例,基于预设数量TextView控件及对应的页数据,对文本进行显示之后,还包括:

当检测到滑动操作时,基于ListView控件的复用功能,更新滑出屏幕的TextView控件对应的页数据;

基于更新后的TextView控件及对应的页数据,对文本进行显示。

作为一种可选实施例,计算目标特征向量与每一表情类型对应的聚类中心对象之间的目标欧式距离之前,还包括:

对于任一表情类型对应的训练样本,从训练样本中随机选取一张图像的特征向量作为初始聚类中心对象;

按照第二预设算法对初始聚类中心对象进行迭代更新,得到任一表情类型对应的聚类中心对象。

作为一种可选实施例,根据页码,从LrcCache中读取任一TextView控件的页数据之后,还包括:

当从LrcCache中读取页数据失败时,根据页码从软引用对象中读取对应的页数据。

作为一种可选实施例,根据页码从软引用对象中读取对应的页数据之后,还包括:

当从软引用对象中读取页数据失败时,根据页码从文本文件中读取对应的页数据。

上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。

基于上述图1对应的实施例所提供的内容,本发明实施例提供了一种文本显示方法。参见图2,本实施例提供的方法流程包括:201、通过ListView控件加载预设数量的TextView控件;202、获取每个TextView控件对应的页数据;203、基于预设数量TextView控件及对应的页数据,对文本进行显示;204、当检测到滑动操作时,基于ListView控件的复用功能,更新滑出屏幕的TextView控件对应的页数据;205、基于更新后的TextView控件及对应的页数据,对文本进行显示。

其中,201、通过ListView控件加载预设数量的TextView控件。

在android系统中就算对文本进行了分页,然后将每个页数据的设置到TextView控件中,通过TextView控件对文本进行显示。但当Textview中文本较多时,读取及加载速度也有限。另外,手机屏幕进行显示的文件也是有限的。

针对该问题,可对视图进行分页,将超过一个屏幕外的视图进行复用。在本实施例中使用ListView控件,来对视图进行分页。其中,ListView控件的特点是如果一个屏幕最大可以显示n行,则Listivew实际只会加载n+2行。当用户滑动屏幕时,会将滑出屏幕的行进行复用。例如,当用户下滑时会将上面滑出屏幕的行来复用接到最下面,上滑同理。

将ListView的每个item作为TextView,避免通过一个TextView加载过多文本时,加载速度慢的问题。同时通过Listview的复用功能,对滑出屏幕的TextView进行复用,也能防止textview创建过多的问题。

需要说明的是,使用Listview需要重写其getCount方法和getView方法,getCount方法用于返回Listview显示的总行数。在本实施例中,将总页数PAGES作为Listview的总行数返回,即Listview的每行对应一页)。getView方法用于返回当前item的textview,在本实施例中将textview的数据设置成当前需要显示的页数据。

其中,202、获取每个TextView控件对应的页数据。

在本步骤中获取每个TextView控件对应的页数据时,可通过上述步骤201中的getView方法。getView在获取当前页数据可直接调图1对应的实施例中封装好的三级缓存接口getPage方法,本实施例对此不作具体限定。

本实施例不对获取每个TextView控件对应的页数据的方式作具体限定,包括但不限于:对于任一TextView控件,确定任一TextView控件对应的页码;根据页码,从LrcCache中读取任一TextView控件的页数据。

由于LrcCache中可能并没有存储该页码对应的页数据,基于上述图1对应的软引用相关内容,从而当从LrcCache中读取页数据失败时,可根据页码从软引用对象中读取对应的页数据。

考虑到软引用对象可能也未存储该页码对应的页数据,从而当从软引用对象中读取页数据失败时,可根据页码从文本文件中读取对应的页数据。

由于读取文件是一个耗时的操作,在android系统中需要防止耗时操作阻塞UI线程,从而本实施例中通过开启异步线程来读取文件,本实施例对此不作具体限定。由于预先对文件进行了分页,从而当要读取文件中的某一页时,可先调用RandomAccessFile类seek方法,seek方法将文件读写指针偏移到指定位置进行读写。需要说明的是,这里的偏移操作就是当前页码乘以PAGE_SIZE,然后调用read函数读取。将读取到的页数据存储到LrcCache缓存中,并返回供后续使用。

总之,当读取页面数据时,首先判断数据在不在LrcCache中,如果不在则从软引用中查找。如果不在软引用,则再到文件中进行读取。通过上述三层读取机制,能够在保证内存的合理运行前提下,为读取过程带来更好的加载效果。

其中,203、基于预设数量TextView控件及对应的页数据,对文本进行显示。

对于每个TextView控件,通过调用每个TextView控件下的setText方法,可对每个TextView对应的页数据进行显示。

其中,204、当检测到滑动操作时,基于ListView控件的复用功能,更新滑出屏幕的TextView控件对应的页数据。

由上述步骤201中的内容可知,本实施例通过ListView控件来对视图进行分页,并对一个屏幕外的视图进行复用,从而能够避免因创建过多TextView导致内存占用过多的问题,进而节省了内存空间。

基于上述内容,当检测到用户滑动屏幕的操作时,可不用重新创建TextView控件,只需将滑出屏幕外的TextView控件复用至更新的视图中即可。具体地,当用户下滑时,会将下面滑出屏幕的行来复用接到最上面。当用户上滑时,会将上面滑出屏幕的行来复用接到最下面。

相应地,需要更新滑出屏幕后进行复用的TextView控件所对应的页数据。具体地,可通过上述步骤201中的getView方法。同样地,getView在获取当前页数据可直接调图1对应的实施例中封装好的三级缓存接口getPage方法,本实施例对此不作具体限定。

其中,205、基于更新后的TextView控件及对应的页数据,对文本进行显示。

本实施例不对基于更新后的TextView控件及对应的页数据,对文本进行显示的方式作具体限定,包括但不限于采用上述步骤203中的方法。

本发明实施例提供的方法,通过ListView控件加载预设数量的TextView控件,获取每个TextView控件对应的页数据,基于预设数量TextView控件及对应的页数据,对文本进行显示。由于通过ListView控件下的多个TextView控件对文本进行显示,从而避免了通过一个TextView控件加载过多文本时加载速度较慢的问题。另外,由于是基于ListView控件显示文本数据,即每次加载文本数据时都是加载一屏的部分数据,从而避免了加载过多数据导致内存不足的问题。因此,文本显示的效率较高。

另外,通过ListView控件对TextView控件进行复用,能够避免创建多个TextView控件造成内存占用过多的问题,从而进一步地节省了内存空间。

最后,在读取页数据时,通过三层读取机制,能够在保证内存的合理运行前提下,为读取过程带来更好的加载效果。

本发明实施例提供了一种文本显示装置,该装置用于执行上述图1或图2对应的实施例中所提供的文本显示方法。参见图3,该装置包括:

加载模块301,用于通过ListView控件加载预设数量的TextView控件;

获取模块302,用于获取每个TextView控件对应的页数据;

第一显示模块303,用于基于预设数量TextView控件及对应的页数据,对文本进行显示。

作为一种可选实施例,参见图4,该装置还包括:

更新模块304,用于当检测到滑动操作时,基于ListView控件的复用功能,更新滑出屏幕的TextView控件对应的页数据;

第二显示模块305,用于基于更新后的TextView控件及对应的页数据,对文本进行显示。

作为一种可选实施例,获取模块302,用于对于任一TextView控件,确定任一TextView控件对应的页码;根据页码,从LrcCache中读取任一TextView控件的页数据。

作为一种可选实施例,获取模块302,用于当从LrcCache中读取页数据失败时,根据页码从软引用对象中读取对应的页数据。

作为一种可选实施例,获取模块302,用于当从软引用对象中读取页数据失败时,根据页码从文本文件中读取对应的页数据。

本发明实施例提供的装置,通过ListView控件加载预设数量的TextView控件,获取每个TextView控件对应的页数据,基于预设数量TextView控件及对应的页数据,对文本进行显示。由于通过ListView控件下的多个TextView控件对文本进行显示,从而避免了通过一个TextView控件加载过多文本时加载速度较慢的问题。另外,由于是基于ListView控件显示文本数据,即每次加载文本数据时都是加载一屏的部分数据,从而避免了加载过多数据导致内存不足的问题。因此,文本显示的效率较高。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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