一种快速显示大容量数据信息的方法

文档序号:9887711阅读:175来源:国知局
一种快速显示大容量数据信息的方法
【技术领域】
[0001]本发明实现了一种利用线程池中固定线程数量进行数据信息批量加载,从缓存文件中快速读取数据信息的方法。
【背景技术】
[0002]移动互联网的快速发展是当今科技领域不可忽视的潮流,其给用户带来了全新的体验,在满足广大用户的需求上扮演着越来越重要的角色。而随着Android系统在互联网运用中越来越广泛,那么如何从服务端上高效率的获取图片等资源进行开发,并且保证良好的软件结构,就成了Android研发中的一个关键。Android应用中经常从网络中加载大量图片就是一个很好的例子。
[0003]目前的Android技术中虽也有采用异步下载信息资源的方法,以达到快速刷新View的目的。但是当有大量信息资源在下载,并且View的刷新速度要求非常快时,就无法对线程进行安全的控制,系统资源也会产生大量浪费,最终信息的显示速度也会受到影响。现在利用线程池和二级缓存,可以安全有效的下载信息和快速的刷新。

【发明内容】

[0004]为了解决上述问题,本发明提供了一种利用线程池和二级缓存,快速显示大容量数据信息的方法。
[0005]为了达到上述目的,本发明所设计的快速显示大容量数据信息的方法,包括以下步骤:
步骤1:创建一个固定大小的线程池,该线程池是专门用来进行数据信息的处理,包括缓存数据信息获取、文件数据信息获取和网络数据信息获取;
步骤2:申请一块固定大小的缓存,用来存放从文件中或网络上获取的数据信息,每一个数据信息的存放以Url为关键字,以保证缓存中每一个数据的唯一性,获取数据的准确性;
步骤3:创建一个获取数据任务队列,用以存放每一个获取数据的任务请求,当用户发送一个请求时,就将该任务请求加入任务队列;当完成一个任务请求时,就把该任务从队列中删除掉;
步骤4:从任务队列中获取任务,然后利用二级缓存原理从中获取数据信息,如果内存中没有则从文件中获取;如果文件中也没有,才从网络中获取,为了下次的便宜运用,从文件中获取数据信息后把它加入内存中;当从网络中获取数据信息后把它加入到内存和文件中;
步骤5:因为Android的UI显示是要在主线程上的,所以通过Handler机制把获取到的数据信息传到主线程上,然后运用Android的动态方式Transit1n或者根据客户需要的动态效果自行去显示该信息,
步骤6:循环步骤4和5,直到任务列表为空。
[0006]本发明所得到的快速显示大容量数据信息的方法,具有以下特点:
1:为了节约系统资源,减少系统拥挤率,达到运行的最佳效果,创建了一个固定大小的线程池,限制系统中执行线程的数量。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列。
[0007]线程池减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。它可以根据系统的承受能力,调整线程池中工作线线程的数量,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约IMB内存,线程开的越多,消耗的内存也就越大,最后死机)。
[0008]创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
[0009]2:在系统加载大量信息时,为了提高加载速度和效率,减少网络流量采用了二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取(按键值key-vaIue从Map中获取),再从文件或sqlite中获取,最后才访问网络。当获得来自网络的数据后,就以key-value的方式存储url和数据信息到HashMap中(一级缓存),同时存储到文件或sqlite中(二级缓存)。
[0010]为防止内存缓存造成堆内存泄露,所以一级缓存严格控制缓存的大小,设置为系统的1/4。
[0011]3:为了增加用户的视觉效果,在信息显示时可以增加动态效果,比如图片旋转、圆形头像等。
[0012]综上所述,本发明所得到的方法具有以下优点:提高了加载速度,节省了数据流量。避免了在ListView频繁更新数据、快速刷新信息时,某个信息要很久才显示或者卡在某个操作上的情况。节约了系统资源,减少了系统资源的拥挤率,达到运行的最佳效果,避免了运行线程过多和无法控制等现象产生。
【附图说明】
[0013]图1是实施例1利用本发明的方法快速显示图片的流程图。
【具体实施方式】
[0014]下面结合Android中的一个实施例参照附图进行详细说明,以便对本发明的技术特征和优点进行更深入的诠释。
[0015]实施例1
如图1所示,本实施例描述的快速显示大容量数据信息的方法,假设显示某个网站上的大批量产品图片,下面将详细说明上述加载在Android应用中的实现方法。其具体实现步骤如下:
步骤1:创建一个5个线程的线程池。为了保证线程池的安全性,利用了线程安全的原子操作。
[0016]步骤2:申请一块5M大小的缓存,用来存放从文件或网络上获取的图片。以key-value的方式将每一张图片存储到哈希列表HashMap中,其中关键字key为该图片的连接Url0
[0017]步骤3:创建一个获取图片任务队列,用以存放每一个获取图片的任务请求。
[0018]注意:对任务队列进行操作时一定要加锁,以防止其它也操作任务队列导致数据混乱。
[0019]步骤4:现在接收到一个图片任务。将该任务加入到任务队列。
[0020]步骤5:判断线程中运行的线程是否已达到饱和。如已饱和则等待;如没饱和则进行线程原子增加操作mNowRunning.1ncrementAndGet (),表明该线程池中增加一条运行的线程,并继续步骤6。
[0021]步骤6:判断任务队列中有没有任务。如有任务则取出该任务并执行(执行步骤7);如无任务则进行线程原子减操作mNowRunning.decrementAndGet()(执行步骤13)。
[0022]步骤7:缓存中是否存在该图片。如存在则直接显示图片(执行步骤11);如不存在则从文件去获取(执行步骤8)。
[0023]步骤8:文件中是否存在该图片。如存在则把该图片保存到缓存,并去显示(执行步骤10);如不存在则继续去网络获取(执行步骤9)。
[0024]步骤9:用Http从网络上获取图片。获取后进行保存(执行步骤10)。
[0025]步骤10:将获取到的图片保存到缓存和文件中。此时如果缓存达到界值,则需要清理,以免内存泄露。
[0026]步骤11:因为Android的UI显示主要在主线程上的,所以通过Handler机制把获取到的图片传到主线程中。通过Andr ο i d的T rans iton进行淡入显示该图片。
[0027]步骤12:完成取出的图片任务后,去执行下一个任务(执行步骤6)。
[0028]步骤13:线程池中的线程原子减操作,说明该线程是空的,已经执行完了。
【主权项】
1.一种快速显示大容量数据信息的方法,包括以下步骤: 步骤1:创建一个固定大小的线程池,该线程池是专门用来进行数据信息的处理,包括缓存数据信息获取、文件数据信息获取和网络数据信息获取; 步骤2:申请一块固定大小的缓存,用来存放从文件中或网络上获取的数据信息,每一个数据信息的存放以Url为关键字,以保证缓存中每一个数据的唯一性,获取数据的准确性; 步骤3:创建一个获取数据任务队列,用以存放每一个获取数据的任务请求,当用户发送一个请求时,就将该任务请求加入任务队列;当完成一个任务请求时,就把该任务从队列中删除掉; 步骤4:从任务队列中获取任务,然后利用二级缓存原理从中获取数据信息,如果内存中没有则从文件中获取;如果文件中也没有,才从网络中获取,为了下次的便宜运用,从文件中获取数据信息后把它加入内存中;当从网络中获取数据信息后把它加入到内存和文件中; 步骤5:因为Android的UI显示是要在主线程上的,所以通过Handler机制把获取到的数据信息传到主线程上,然后运用Android的动态方式Transit1n或者根据客户需要的动态效果自行去显示该信息, 步骤6:循环步骤4和5,直到任务列表为空。
【专利摘要】本发明所设计的一种快速显示大量数据信息的方法,利用固定线程池,可以多个线程去执行数据信息获取任务,而不会产生数据混乱。把任务请求放在同一个任务列表中,每次操作任务列表必须锁住该列表。从任务列表中获取未完成的任务,然后通过二级缓存获取数据。如通过文件或网络获取到的数据,则相应的加到内存或文件内,以便宜下次运用。完成所取任务后,从任务列表中删除该任务,并取出下一个任务。本发明所得到的方法具有以下优点:提高了加载速度,节省了数据流量。避免了在Listview频繁更新数据、快速刷新信息时,某个信息要很久才显示或者卡在某个操作上的情况。节约了系统资源,减少了系统资源的拥挤率,达到运行的最佳效果。
【IPC分类】G06F17/30, G06F9/44
【公开号】CN105653610
【申请号】
【发明人】金昊炫, 吴斌斌, 康克勤, 宋洁珺, 李金龙
【申请人】数源科技股份有限公司
【公开日】2016年6月8日
【申请日】2015年12月25日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1