基于Android平台的通过列表控件异步加载图片的优化方法技术

技术编号:11595488 阅读:170 留言:0更新日期:2015-06-12 03:56
本发明专利技术提供一种基于Android平台的通过列表控件异步加载图片的优化方法,通过自行建立线程池和等待链表,利用近期最少使用思想,通过后进先出方式来处理线程逻辑,使得在列表滚动过程中处于屏幕中央的线程永远被优先加载,处于栈顶的最容易被抛弃,并通过等待链表的个数限制来加速栈顶节点的被抛弃过程。本发明专利技术的基于Android平台的通过列表控件异步加载图片的优化方法有效地提升每个线程占用的带宽,加速资源获取的速度;提升了用户体验,节省了系统资源。

【技术实现步骤摘要】

本专利技术涉及一种图片加载的方法,特别是涉及一种。
技术介绍
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了 Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1% ο因此,基于Android平台的各种应用呈现爆发式增长,而且移动互联网的发展让更多的应用已经不仅局限于以前的单机工具类应用,而更趋向于移动互联网式交互型应用。在现有的各类应用中,都需要展示服务端提供的大量图片文字等信息。因此,列表控件成为一个必不可少的控件,列表中使用异步加载网络图片也是常用的技术手段。现有技术中,对网络图片的加载均是通过调用系统异步加载方式来实现。基本所有的优化方案都是针对网络图片做缓存。如申请号为201110154365.6、专利技术名称为《通过控件加载远程图片的方法及系统》的中国专利技术专利中公开一种通过控件加载远程图片的方法,包括以下步骤:下载远程图片文件;对所述远程图片文件进行解码,读取图片数据;根据所述图片数据绘制图片到控件上。采用该方法,能在Android系统的移动终端上,读取远程图片并展示在用户界面上。再比如申请号为201210583612.9、专利技术名称为《基于Android平台的图片加载方法》的中国专利技术专利中公开一种图片信息加载方法,包括:获取当前界面所需展示的图片的数据信息;根据所述图片的缩略图的数据量大小,从小到大下载所述图片的缩略图;当各个所述图片的缩略图下载完成后,根据所述图片的完整图的数据量大小,从小到大下载所述图片的完整图。然而,目前基于Android平台的终端设备中在通过列表控件异步加载网络图片时均针对缓存来进行优化,在加载数量和加载逻辑上却依然使用了系统的默认异步加载方式,并未从加载数量和加载逻辑上去进行优化。对于加载逻辑而言,Android系统本身异步加载过程没有问题,问题在于通过列表控件异步加载网络图片这种特定情况下就存在一定的不合理。这是因为,当异步操作大于系统设定的工作线程最大值后,新的异步操作会加入等待队列中,而队列又是先进先出的方式。这样的情况会导致于用户快速滑动列表之后,列表迅速发起大量的异步请求,此时列表早已经到了下面几十行,可是线程池中还是依次慢慢一条条执行所有的异步请求。等执行到几十行之后时间和资源都损耗较为严重,造成用户体验太差。对于加载数量而言,目前Android系统默认的异步请求的线程池最大工作线程个数24个,由于网络带宽有限,而且手机对于列表的展示个数通常为6-10个。为了快速展示图片到控件上,只需同时并发10个左右即可。因此,控制并发量也能增加每个线程的处理能力,同时减少使用了系统资源。
技术实现思路
鉴于以上所述现有技术的缺点,本专利技术的目的在于提供一种,在Android平台的应用中,通过ListView或GridView或者继承于此两类View的列表控件在异步加载图片时对加载逻辑和加载数量进行优化,从而解决异步加载图片时造成的卡顿或者内存溢出等问题。为实现上述目的及其他相关目的,本专利技术提供一种,包括以下步骤:步骤S1、启动应用;步骤S2、建立线程池,设定线程池中最大同时工作线程数;步骤S3、建立一个等待线程链表,定义等待线程链表最大值;步骤S4、用户操作列表滚动时,判断该列表是否有加载图片的需求,如果否,转入步骤S13 ;如有是,则每个有需求的列表条目均发出自己的异步加载任务,转入步骤S5 ;步骤S5、判断目前线程池中正在工作线程数是否小于设定的最大同时工作线程数,如果是,转入步骤S6 ;如果否,转入步骤S7 ;步骤S6、将异步加载任务载入到线程池中并立刻运行,转入步骤S7 ;步骤S7、判断目前等待线程链表个数是否小于等待线程链表最大值,如果是,转入步骤S8 ;如果否,转入步骤S9 ;步骤S8、将此异步加载任务存入等待线程链表末尾,转入步骤SlO ;步骤S9、将此等待线程链表中第一个异步节点抛弃,并把最新的异步加载任务插入到该等待线程链表队尾,转入步骤SlO ;步骤S10、当线程池中的某一个工作线程执行完成后,检查等待线程链表,判断等待线程链表是否为空,如果是,则转入步骤S12 ;如果否,则转入步骤Sll ;步骤S11、取出等待线程链表中队尾的节点,并加入线程池立刻执行,转入步骤SlO ;步骤S12、完成所有异步加载任务;步骤S13、等待用户继续操作列表。根据上述的,其中:所述步骤S2中,根据Android终端设备CPU个数设定线程池中最大同时工作线程数。进一步地,根据上述的,其中:线程池中最大同时工作线程数与Android终端设备CPU个数相同。根据上述的,其中:所述步骤S3中,根据列表控件显示数量定义等待线程链表最大值。进一步地,根据上述的,其中:等待线程链表最大值大于列表控件显示数量。如上所述,本专利技术的,具有以下有益效果:(I)通过后进先出原则和限制等待队列最大值来对栈顶的操作进行抛弃处理,以提前最新加入队列的操作的开始执行时间;(2)通过分析自身产品的规则,结合硬件资源,找出本应用最合适的并发数,以提升每个线程占用的带宽,加速资源获取的速度;(3)提升了用户体验,节省了系统资源。【附图说明】图1显示为本专利技术的的流程图。【具体实施方式】以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的【具体实施方式】加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。需要说明的是,本实施例中所提供的图示仅以示意方式说明本专利技术的基本构想,遂图式中仅显示与本专利技术中有关的组件而非按照实际实施时的组件数目、形状当前第1页1 2 本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/CN104699498.html" title="基于Android平台的通过列表控件异步加载图片的优化方法原文来自X技术">基于Android平台的通过列表控件异步加载图片的优化方法</a>

【技术保护点】
一种基于Android平台的通过列表控件异步加载图片的优化方法,其特征在于:包括以下步骤:步骤S1、启动应用;步骤S2、建立线程池,设定线程池中最大同时工作线程数;步骤S3、建立一个等待线程链表,定义等待线程链表最大值;步骤S4、用户操作列表滚动时,判断该列表是否有加载图片的需求,如果否,转入步骤S13;如有是,则每个有需求的列表条目均发出自己的异步加载任务,转入步骤S5;步骤S5、判断目前线程池中正在工作线程数是否小于设定的最大同时工作线程数,如果是,转入步骤S6;如果否,转入步骤S7;步骤S6、将异步加载任务载入到线程池中并立刻运行,转入步骤S7;步骤S7、判断目前等待线程链表个数是否小于等待线程链表最大值,如果是,转入步骤S8;如果否,转入步骤S9;步骤S8、将此异步加载任务存入等待线程链表末尾,转入步骤S10;步骤S9、将此等待线程链表中第一个异步节点抛弃,并把最新的异步加载任务插入到该等待线程链表队尾,转入步骤S10;步骤S10、当线程池中的某一个工作线程执行完成后,检查等待线程链表,判断等待线程链表是否为空,如果是,则转入步骤S12;如果否,则转入步骤S11;步骤S11、取出等待线程链表中队尾的节点,并加入线程池立刻执行,转入步骤S10;步骤S12、完成所有异步加载任务;步骤S13、等待用户继续操作列表。...

【技术特征摘要】

【专利技术属性】
技术研发人员:李权宇
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

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

1