基于Android平台的图片加载方法

文档序号:6494074阅读:138来源:国知局
基于Android平台的图片加载方法
【专利摘要】本发明涉及一种图片加载方法,尤其涉及一种基于Android平台的图片加载方法。本发明的基于Android平台的图片加载方法,包括解决加载大量图片的时候界面卡住和内存不够的流程。本发明的基于Android平台的图片加载方法针对图片列表显示慢的问题,本发明中使用了异步加载图片的方法,加快了图片列表的显示速度,并且使得列表滚动的顺滑性大幅提高。
【专利说明】 基于Android平台的图片加载方法
【技术领域】
[0001]本发明涉及一种图片加载方法,尤其涉及一种基于Android平台的图片加载方法。
【背景技术】
[0002]Android平台在当今社会中的应用越来越广,Android平台可应用于多种终端,如手机、平板、智能电视、机顶盒等。基于Android平台的应用程序也越来越多,并且很多都会频繁的处理图片数据。在Android平台下,系统会为每一个应用程序开启一个虚拟机进程,并为其分配指定大小的内存,当有大量图片加载到内存中时就会造成内存溢出,同时应用程序崩溃。当有大量图片需要同时显示的时候,应用程序会去读取图片,当图片全部读取完成后才会完成显示,这样就造成了界面卡顿的现象。

【发明内容】

[0003]本发明的技术效果能够克服上述缺陷,提供一种基于Android平台的图片加载方法,其解决加载大量图片时遇到的相关问题,如加载大量图片时会导致应用卡住,大量图片会导致内存不够,从而使应用强行退出,加载网络图片时速度会变得特别慢。在该发明中解决了以上问题,使应用的使用体验流畅。
[0004]为实现上述目的,本发明采用如下技术方案:其包括解决加载大量图片的时候界面卡住和内存不够的流程,
[0005]其中,解决加载大量图片的时候界面卡住的步骤如下:
[0006]( I)继承相应的适配器类;
[0007](2)重写类中的getViewO函数,该函数返回一个View对象,列表控件或网
[0008]格控件会把该对象加载到相应的项目中;
[0009](3)在getViewO函数中,首先会把图片的地址,即图片的URL使用setTagO函数,给正在处理的ImageView对象设置标签,使得可以通过图片地址找到该ImageView对象;
[0010](4)调用图片加载的函数,来获取图片地址所对应的图片数据,并且在其中设置回调函数,该回调函数实现的功能是,以图片地址为标签来查找相应的对象,找到之后将相应的图片数据加载到对象中;
[0011]其中,解决内存不够的流程在图片加载函数中,定义图片地址到图片数据的映射表的时候,把保存图片数据的内存类型声明为软引用类型SoftReference,该类型的内存会在系统内存不够的情况下由系统强制回收。
[0012]应用加载大量图片的时候,界面会卡住,无法操作,解决思路:使用异步加载技术,先使界面显示出来,然后使用新开的线程来更新界面中的相关控件。
[0013]应用显示大量图片的时候,导致内存不够,应用强行退出,解决思路:使用软引用SoftReference类型来保存图片到内存,在内存不够时,使系统可以自行回收用不到的图片所占内存。加载图片的缩略图。
[0014]该技术主要应用于android应用需要加载大量网络图片的情况。同样适用于加载大量本地图片的情况。当android设备内存较小的时候,也可以使用该技术来避免内存不够的情况。
[0015]本发明的基于Android平台的图片加载方法针对图片列表显示慢的问题,本发明中使用了异步加载图片的方法,加快了图片列表的显示速度,并且使得列表滚动的顺滑性大幅提高。针对内存不够的问题,本发明中使用了将内存声明为SoftReference类型的方法,使得该片内存可在内存不够的时候由系统强制回收,减少了内存占用。同时,采用了加载图片缩略图的方法,进一步减少图片在内存中的占用。使用以上两种方法,避免了随时因为内存不够带来的程序崩溃问题。
【具体实施方式】
[0016]本发明的基于Android平台的图片加载方法,包括解决加载大量图片的时候界面卡住和内存不够的流程。
[0017]针对第一个技术问题,以下是具体的技术方案:
[0018]在android应用中加载大量图片一般会用到列表控件以及网格控件,在显示图片的时候需要为其设置相应的适配器,在该发明中通过重写适配器来实现异步加载图片。
[0019]首先,继承相应的适配器类。
[0020]然后,重写类中的getViewO函数,该函数返回一个View对象,列表控件或网格控件会把该对象加载到相应的项目中。
[0021]在getViewO函数中,首先会把图片的地址,即图片的URL使用setTagO函数,给正在处理的ImageView对象设置标签,使得可以通过图片地址找到该ImageView对象。
[0022]然后会调用图片加载的函数,来获取图片地址所对应的图片数据,并且在其中设置回调函数,该回调函数实现的功能是,以图片地址为标签来查找相应的对象,找到之后将相应的图片数据加载到对象中。
[0023]该图片加载函数有两类返回值,一种不为空,这时会设置获取到的数据到ImageView对象上,另一种为空,这时会设置一个默认的图片到对象上。
[0024]列表控件或网格控件会为可视范围内的项目调用getViewO,使用上述方法之后,getViewO可以快速返回,从而使页面迅速显示出来,相比于传统的加载方法,速度极快。
[0025]图片加载函数的内部是这样实现的,首先需要定义一个图片地址到图片数据的映射表,在收到图片地址之后首先去表里查询是否有该地址,如果有则查询对应的数据是否为空,不为空则表示需要的图片在缓存中,这时候把该数据返回。否则表示该数据不在缓存中,需要另外加载。开启新线程从网络获取图片,然后将该图片以及相应的地址加入到映射表,最后调用回调函数,把数据设置到图片地址对应的对象上,完成图片加载。
[0026]针对第二个技术问题,具体解决方案如下:
[0027]在图片加载函数中,定义图片地址到图片数据的映射表的时候,把保存图片数据的内存类型声明为软引用类型SoftReference,该类型的内存会在系统内存不够的情况下由系统强制回收,因此不会造成内存原因的程序崩溃。
[0028]相比于使用强引用或弱引用的方法,该方法可以及时回收内存,避免程序崩溃。[0029]此外如果加载的单张图片体积过大,仍然会造成内存不够用,程序崩溃,所以在本发明中使用了加载缩略图的技术。在从网络获取图片的时候需要两步操作,第一次是在获取到图片的流之后,仅从中读取图片的长宽,而不读取实际的数据,然后查看图片的长宽是否超标,如果超标,则计算缩小后的长宽,最后第二次获取图片的流,并从中读取指定比例的图片数据。
【权利要求】
1.一种基于Android平台的图片加载方法,其特征在于,包括解决加载大量图片的时候界面卡住和内存不够的流程, 其中,解决加载大量图片的时候界面卡住的步骤如下: (1)继承相应的适配器类; (2)重写类中的getViewO函数,该函数返回一个View对象,列表控件或网 格控件会把该对象加载到相应的项目中; (3)在getViewO函数中,首先会把图片的地址,即图片的URL使用setTagO函数,给正在处理的ImageView对象设置标签,使得可以通过图片地址找到该ImageView对象; (4)调用图片加载的函数,来获取图片地址所对应的图片数据,并且在其中设置回调函数,该回调函数实现的功能是,以图片地址为标签来查找相应的对象,找到之后将相应的图片数据加载到对象中; 其中,解决内存不够的流程在图片加载函数中,定义图片地址到图片数据的映射表的时候,把保存图片数据的内存类型声明为软引用类型SoftReference,该类型的内存会在系统内存不够的情况下由系统强制回收。
2.根据权利要求1所述的基于Android平台的图片加载方法,其特征在于,图片加载的函数首先需要定义一个图片地址到图片数据的映射表,在收到图片地址之后首先去表里查询是否有该地址,如果有则查询对应的数据是否为空,不为空则表示需要的图片在缓存中,这时候把该数据返回;否则表示该数据不在缓存中,需要另外加载;开启新线程从网络获取图片,然后将该图片以及相应的地址加入到映射表,最后调用回调函数,把数据设置到图片地址对应的对象上,完成图片加载。
【文档编号】G06F9/445GK103902318SQ201210583612
【公开日】2014年7月2日 申请日期:2012年12月30日 优先权日:2012年12月30日
【发明者】于忠清, 王兵, 顾微微, 翟伟伟, 崔九梅, 王爱玲, 赵红雷 申请人:青岛海尔软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1