CN102541605B - 基于Android系统的图片加载方法和装置 - Google Patents
基于Android系统的图片加载方法和装置 Download PDFInfo
- Publication number
- CN102541605B CN102541605B CN201110454870.2A CN201110454870A CN102541605B CN 102541605 B CN102541605 B CN 102541605B CN 201110454870 A CN201110454870 A CN 201110454870A CN 102541605 B CN102541605 B CN 102541605B
- Authority
- CN
- China
- Prior art keywords
- picture
- load
- loading
- display
- quoting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 133
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000015654 memory Effects 0.000 claims abstract description 69
- 230000006870 function Effects 0.000 claims description 55
- 238000011084 recovery Methods 0.000 claims description 12
- 230000001351 cycling effect Effects 0.000 claims description 3
- 238000011017 operating method Methods 0.000 claims description 3
- 238000004064 recycling Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000007812 deficiency Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种基于Android系统的图片加载方法及装置。该方法包括:A、发出图片加载任务的指令,并初始化存储图片的软引用;B、判断所述软引用中是否存储有所要显示的图片;C、若所述软引用中没有存储所述所要显示的图片,则运行图片加载线程进行加载;若所述软引用中存储有所述所要显示的图片,则直接进入步骤F;D、若内存不充足,则自动回收所述软引用中存储的图片直至所述内存充足;E、所述所要显示的图片加载完成,并存储于所述软引用中;F、从所述软引用中直接读取所述所要显示的图片并显示。本发明避免了图片的重复下载,实现图片快速调用,降低了对内存的依赖,在低性能的系统中也能流畅运行,增强了用户体验。
Description
技术领域
本发明涉及Android系统的应用领域,尤其涉及一种基于Android系统的图片加载方法及图片加载装置。
背景技术
Android系统对每个进程限制最大内存为16M,在某些图片较多的应用程序中,例如:图片浏览、在线显示海报过程中经常会遇到内存不足(out of Memory)的问题,此时,加载图片的过程缓慢,用户体验较差。
现有技术中,一种方法是通过加大Android系统对每个进程的最大内存限制来解决此问题,但是这种解决方案要求Android系统的内存硬件充足;而实际产品中,系统通常需要同时运行多个占用内存较大的应用程序,这样就很容易导致系统内存不足,程序运行缓慢。
另外还有一种方法是通过不断地手动调用java垃圾回收机制,来释放内存,由于进行垃圾回收的线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行,不能强制执行,所以在应用程序主动调用时,如果系统忙或者未达到垃圾回收条件,java垃圾回收机制是不会得到响应的,而且系统长时间等待垃圾回收程序的运行还是会造成内存的溢出,所以这种方式也不能从根本上解决问题。
因此,现有技术还有待于改进和发展。
发明内容
针对现有技术的Android系统中加载大量图片时出现的内存不足、加载速度缓慢,用户体验差的技术问题,本发明提供一种基于Android系统的图片加载装置及方法,旨在使Android系统在加载大量图片时,降低对内存的依赖,在低性能的系统中也能流畅运行,增强用户的体验。
本发明为解决上述技术问题所采用的技术方案如下:
一种基于Android系统的图片加载方法,包括以下步骤: A、发出图片加载任务的指令,并初始化存储图片的软引用; B、判断所述软引用中是否存储有所要显示的图片; C、若所述软引用中没有存储所述所要显示的图片,则运行图片加载线程进行加载;若所述软引用中存储有所述所要显示的图片,则直接进入步骤F; D、若内存不充足,则自动回收所述软引用中存储的图片直至所述内存充足; E、所述所要显示的图片加载完成,并存储于所述软引用中; F、从所述软引用中直接读取所述所要显示的图片并显示。
较佳地,所述步骤F具体为:所述图片加载线程调用回调函数通知主线程从所述软引用中直接读取所述所要显示的图片并显示。
较佳地,所述回调函数的具体执行步骤包括: F1、初始化用于连接所述主线程与所述图片加载线程的接口类; F2、所述主线程注册所述回调函数,及设置提示图片加载状态的信息,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息; F3、所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片; F4、将查询结果反馈至所述主线程。
较佳地,所述步骤F4具体包括:当所述查询结果是所述软引用中存在所述所要显示的图片时,判断所述所要显示的图片是否已被回收,若否,则控件显示已加载的图片,若是,则所述控件显示所述提示图片加载状态的信息;当所述查询结果是所述软引用中不存在所述所要显示的图片时,则所述控件显示所述提示图片加载状态的信息。
较佳地,在所述步骤A之前还包括预设步骤,具体包括创建图片的数据结构,初始化图片列表、设置存储图片的所述软引用及构建哈希表的步骤;将所要加载的图片信息填充到所述数据结构的步骤;注册对应所述所要加载的图片的回调函数的步骤。
较佳地,所述数据结构包括图片加载的地址、加载索引及对应每一图片的回调函数对象,所述图片加载的地址用于记录图片加载的路径,所述加载索引用于记录图片在所述图片列表中的位置,所述对应每一图片的回调函数对象用于被所述回调函数调用。
较佳地,所述步骤E具体包括:所述所要显示的图片加载完成,为所述所要显示的图片创建软引用,将所述所要显示的图片存储于所述软引用中,在所述哈希表中建立所述所要显示的图片的地址与存储所述所要显示的图片的软引用的对应关系。
较佳地,所述图片加载线程加载所述所要显示的图片的步骤包括: 循环步骤,图片加载线程循环运行,判断是否有图片加载任务;图片加载队列运行步骤,当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息;加载步骤,若所述所要加载的图片的图片信息不为空,则加载所述所要加载的图片。
较佳地,在所述加载步骤进行所述所要加载的图片的加载时,并行运行JAVA垃圾回收程序,当判断出所述所要加载的图片在加载过程中出现内存不足时,所述JAVA垃圾回收程序回收内存垃圾,然后继续加载所述所要加载的图片,直至加载完成。
本发明还提供一种基于Android系统的图片加载装置,包括:初始化模块,用于在发出图片加载任务的指令时,初始化存储图片的软引用;判断模块,用于判断所述软引用中是否存储有所要显示的图片;图片加载模块,在所述软引用中没有存储所述所要显示的图片时,加载所述所要显示的图片;回收模块,用于在内存不充足时,自动回收所述软引用中存储的图片直至所述内存充足;存储模块,用于在加载完成所述所要显示的图片后,存储所述所要显示的图片至所述软引用中;调用显示模块,用于调用所述软引用中存储的所述所要显示的图片并显示。
较佳地,所述调用显示模块包括回调函数模块,用于所述图片加载模块和主线程之间的接口。
较佳地,所述回调函数模块包括: 接口类初始化单元,用于初始化连接所述主线程与所述图片加载线程的接口类;注册回调函数与加载提示单元,用于所述主线程注册所述回调函数,及设置提示图片加载状态的信息,其中,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息;查询单元,用于所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片;反馈单元,用于依据所述查询单元的查询结果,反馈所述所要显示的图片的加载状态至所述主线程。
较佳地,所述图片加载模块包括:循环单元,用于循环判断是否有图片加载任务;图片加载队列运行单元,用于当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息;加载单元,用于在所述所要加载的图片的图片信息不为空时,加载所述所要加载的图片。
较佳地,所述图片加载模块还包括:JAVA垃圾回收单元,用于在加载所述所要加载的图片时,判断出所述所要加载的图片在加载过程中出现内存不足的情况下回收内存垃圾。
与现有技术相比,本发明所提供的基于Android系统的图片加载装置及方法,通过在软引用中存储图片及增加对软引用进行垃圾回收,避免了图面的重复下载,实现了所需下载图片的快速调用,使Android系统在加载大量图片时,降低了对内存的依赖程度,在低性能的系统中也能流畅运行,增强了用户体验。
附图说明
图1是本发明基于Android系统的图片加载方法的较佳实施例的整体流程图。
图2是本发明基于Android系统的图片加载方法的回调函数的较佳实施例的执行方法流程图。
图3是本发明基于Android系统的图片加载方法的图片加载线程的较佳实施例的方法流程图。
图4是本发明基于Android系统的图片加载装置的较佳实施例的结构示意图。
图5是本发明基于Android系统的图片加载装置的回调函数的较佳实施例的结构示意图。
图6是本发明基于Android系统的图片加载装置的图片加载模块的较佳实施例的结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参见图1,图1是本发明基于Android系统的图片加载方法的较佳实施例的整体流程图。本发明提供的基于Android系统的图片加载方法,如图1所示,包括以下步骤:
S100、发出图片加载任务的指令,并初始化存储图片的软引用;
具体地,在步骤S100之前,还可以包括预设步骤,具体包括创建图片的数据结构,初始化图片列表、设置存储图片的所述软引用及构建哈希表的步骤;将所要加载的图片信息填充到所述数据结构的步骤;注册对应所述所要加载的图片的回调函数的步骤。所述数据结构包括图片加载的地址、加载索引及对应每一图片的回调函数对象,所述图片加载的地址用于记录图片加载的路径,所述加载索引用于记录图片在所述图片列表中的位置,所述对应每一图片的回调函数对象用于被所述回调函数调用。
S200、判断所述软引用中是否存储有所要显示的图片:当所述软引用中存储有所述所要显示的图片时,则进入步骤S700;当所述软引用中没有存储所述所要显示的图片,则进入下一步;
S300、若所述软引用中没有存储所述所要显示的图片,则运行图片加载线程进行加载;
S400、判断内存是否充足;当内存不充足时,进入步骤S500,当内存充足时进入步骤S700;
S500、自动回收所述软引用中存储的图片直至所述内存充足;
S600、所要显示的图片加载完成,并存储于所述软引用中;
具体地,在一实施例中,所述所要显示的图片加载完成,为所述所要显示的图片创建软引用,将所述所要显示的图片存储于所述软引用中,在所述哈希表中建立所述所要显示的图片的地址与存储所述所要显示的图片的软引用的对应关系。
S700、从所述软引用中直接读取所述所要显示的图片并显示。
本发明的基于Android系统的上述图片加载方法,当有图片需要加载时,首先从软引用中进行查找,判断所需加载图片是否已经存在于软引用之中,如果从软引用中识别到所需加载的图片,直接由从软引用中调取该图片并把该图片在用户界面上进行显示,只有从软引用中无法查找调用到该图片时,才运行图片加载线程对该图片进行加载;这样的好处是避免了重复加载,并提高了图片的调用速度,在节约了资源的同时,增强了用户的体验。
在一个具体的实施例中,步骤S700具体为所述图片加载线程调用回调函数通知主线程从所述软引用中直接读取所述所要显示的图片并显示。其中,回调函数是用作主线程与图片加载线程的接口。回调函数的主要步骤为:F1、初始化用于连接所述主线程与所述图片加载线程的接口类; F2、所述主线程注册所述回调函数,及设置提示图片加载状态的信息,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息; F3、所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片; F4、将查询结果反馈至所述主线程。其中,步骤F4具体为:当所述查询结果是所述软引用中存在所述所要显示的图片时,判断所述所要显示的图片是否已被回收,若否,则控件显示已加载的图片,若是,则所述控件显示所述提示图片加载状态的信息;当所述查询结果是所述软引用中不存在所述所要显示的图片时,则所述控件显示所述提示图片加载状态的信息。
请参见图2,图2是本发明基于Android系统的图片加载方法的回调函数的较佳实施例的执行方法流程图。如图2所示,回调函数的具体执行步骤包括:
S11、初始化用于连接所述主线程与所述图片加载线程的接口类;
S12、UI线程(即主线程)注册所述回调函数,及设置图片的控件、加载过程中显示的默认图片(提示图片正在加载的信息)和加载失败时显示的默认图片(提示图片加载失败的信息);
S13、判断该图片在软引用中是否存在:当“否”时则进入步骤S16;当“是”时进入下一步;
S14、判断该图片是否已被系统回收:当“是”时则进入步骤S16;当“否”时则进入下一步;
S15、view(控件)显示已加载的图片,具体是指主线程的控件调取软引用中的图片进行显示;
具体地,因为android系统中非用户界面(UI)线程不能更新用户界面(UI)显示,所以图片加载线程利用handler给用户界面(UI)线程发送“正在加载”的消息,用户界面(UI)线程将用户界面(UI)层传过来的图片预览view贴上图片加载过程的相应信息并进行显示;尤其注意的是,Handler主要是接受子线程发送的数据,并用此数据配合主线程更新用户界面(UI);当应用程序启动时,Android系统首先会开启一个主线程,即用户界面(UI)线程,主线程为管理界面中的用户界面(UI)控件,进行事件分发;而图片加载线程属于子线程,不能更新用户界面(UI)显示,所以需要借助handler来实现对用户界面(UI)的更新显示。
S16、view(控件)显示加载过程中显示的默认图片;
S17、加载图片;
S18、判断图片加载是否失败,若没有加载失败,则进入步骤S15;若加载失败,则进入下一步;
S19、view(控件)显示加载失败的默认图片。
另外,本发明基于Android系统的图片加载方法的图片加载线程包括循环步骤,图片加载线程循环运行,判断是否有图片加载任务;图片加载队列运行步骤,当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息;加载步骤,若所述所要加载的图片的图片信息不为空,则加载所述所要加载的图片。还有,在所述加载步骤进行所述所要加载的图片的加载时,并行运行JAVA垃圾回收程序,当判断出所述所要加载的图片在加载过程中出现内存不足时,所述JAVA垃圾回收程序回收内存垃圾,然后继续加载所述所要加载的图片,直至加载完成。
请参见图3,图3是本发明基于Android系统的图片加载方法的图片加载线程的较佳实施例的方法流程图。如图3所示,图片加载线程的步骤具体包括:
S20、开启图片加载线程;
S21、判断是否要停止加载:若要停止加载,则进入S22;若不停止加载则进入步骤S23;
S22、停止图片加载线程;
S23、判断图片加载队列是否大于0:若不大于0,则进入步骤S24,若大于0,则进入步骤S25;
S24、图片加载线程挂起;
S25、删除图片加载队列中的第一个图片,然后读取图片加载队列所要加载的图片的图片信息;
S26、判断图片信息是否为空:当图片信息为空时,进入步骤S211;当图片加载信息不为空时,则进入步骤S27;
S27、加载图片;
S28、判断是否内存不足:当内存不足时,则进入步骤S29,当内存充足时,则进入步骤S210;
S29、垃圾回收;具体地,此时调用运行的JAVA垃圾回收程序,回收内存中的垃圾,JAVA垃圾回收程序不断回收内存中的垃圾,释放内存空间,使加载图片能顺利进行;
S210、加载完成图片处理的流程;
S211、加载下一张图片;在图片加载线程接收到加载下一张图片的任务后,返回到步骤S21,并按照上述步骤循环。
本发明还提供一种基于Android系统的图片加载装置,如图4所示,基于Android系统的图片加载装置包括:
初始化模块50,用于在发出图片加载任务的指令时,初始化存储图片的软引用;
判断模块51,用于判断所述软引用中是否存储有所要显示的图片;
图片加载模块52,在所述软引用中没有存储所述所要显示的图片时,加载所述所要显示的图片;
回收模块53,用于在内存不充足时,自动回收所述软引用中存储的图片直至所述内存充足;
存储模块54,用于在加载完成所述所要显示的图片后,存储所述所要显示的图片至所述软引用中;
调用显示模块55,用于调用所述软引用中存储的所述所要显示的图片并显示。
其中,所述调用显示模块55包括回调函数模块,用于所述图片加载模块和主线程之间的接口。如图5所示,该回调函数模块包括:
接口类初始化单元60,用于初始化连接所述主线程与所述图片加载线程的接口类;
注册回调函数与加载提示单元61,用于所述主线程注册所述回调函数,及设置提示图片加载状态的信息,其中,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息;
查询单元62,用于所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片;
反馈单元63,用于依据所述查询单元的查询结果,反馈所述所要显示的图片的加载状态至所述主线程。
另外,图片加载模块52包括:
循环单元70,用于循环判断是否有图片加载任务。
图片加载队列运行单元71,用于当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息。
加载单元72,用于在所述所要加载的图片的图片信息不为空时,加载所述所要加载的图片。
进一步地,为保证内存有足够的空间,还可以设置JAVA垃圾回收单元73,用于在加载所述所要加载的图片时,判断出所述所要加载的图片在加载过程中出现内存不足的情况下回收内存垃圾。具体地说,在满足JAVA垃圾回收单元73的触发条件时,JAVA垃圾回收单元73回收内存中的垃圾,使图片的加载可以正常进行。
下面进一步是对本发明作详细说明。
软引用(Soft Reference)是java的一种技术,如果一个对象具有软引用,则在内存空间足够时,垃圾回收器就不会回收它;如果内存空间不足,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用,软引用可用来实现内存敏感的高速缓存。软引用可以和一个引用队列(Reference Queue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
本发明系统和方法中,所述软引用直接由Android系统托管,可以动态释放内存;当内存不足时,系统会自动将图片回收;而且图片加载完成以后,在内存充足的情况下,常驻内存,再次使用该图片时,无需重新加载,避免了重复加载的过程,显示速度快;用户界面(UI)层直接通过回调函数更新图片加载状态,实现简单方便。
建立所需加载图片相关信息的过程,建立所需加载的图片数据结构,初始化图片列表,构建包含图片地址、图片对象的软引用的哈希表(hashmap);所述图片列表为一个队列,线程会不断在这个队列读取加载图片的信息,逐个进行加载;所述Hashmap记录了图片加载地址与软引用中图片的一一对应关系;由此创建的软引用对象与每张图片一一对应,所以用hashmap将图片的信息与软引用中的每张图片的一一对应起来,相当于建立一张对应表,示例如表1所示,包含两列:
表1
图片的加载地址 | 图片的软引用 |
/mnt/sdcard/test.jpg | 软引用<Bitmap> |
还有可以进行预处理,具体是判断所需加载的图片是否正在加载、是否已经在加载队列中或是否需要提前加载,并进行相应的处理,这样就可以对已经正在加载或已经在加载列的图片进行预先判断和确认,避免所需加载的图片之数据结构的重复建立,并可以对需要提前加载的图片进行优先加载处理,真正实现图片加载过程中的轻重缓急,增加了用户体验。
此外,将加载完成的图片存入软引用中以后,所述加载完成的图片由Android系统托管,在系统内存充足的情况下,所述加载完成的图片常驻内存;在系统内存不足的情况下,所述加载完成的图片由系统自动回收;更进一步地,加载完成的图片在内存中的存储情况可以通过回调函数更新显示在用户界面上,方便用户直接快速地获取和使用所需加载的图片,并对所需加载的图片之加载时间进行预判。
在本发明所述的图片加载装置较佳实施例中,采用一个循环执行的过程,每次加载完成一张图片,首先删除图片加载队列中该图片的信息,然后在加载队列中获取下一张需要加载的图片信息,继续加载。这样就可以实现多张需加载图片的有序加载,在避免重复加载的同时,有利于确定所需加载图片的优先级,满足用户加载图片时轻重缓急的需求。
本发明所述基于Android系统的图片加载步骤具体包括:
第一步:创建图片的数据结构,初始化图片列表,构建包含图片地址,图片对象的软引用的hashmap。
所述图片的数据结构中包含了图片的加载地址、加载索引(index)及回调函数的对象,所述图片的加载地址用于记录图片的加载路径,所述识别模块通过在hashmap中查找图片的加载地址,判断该图片是否已被加载;所述加载索引index记录了当前图片在图片列表中的序列;图片加载完成以后,程序自动调用回调函数对象,进行用户界面(UI)的刷新。
第二步:获取图片的相关信息,填充图片的数据结构。
第三步:注册回调函数,所述回调函数的作用是将图片加载线程加载完成的图片传送给用户界面(UI)层,便于在用户界面(UI)进行显示,此为图片的显示使用过程。
第四步:判断hashmap中是否存在此图片的地址,如果是则执行步骤第五步,否则执行第七步。
第五步:在hashmap中获取图片对象的软引用,读取图片对象(Bitmap);如果图片对象为空,说明图片已被系统回收,则执行步骤第六步;如果图片对象不为空,则说明图片已被加载进软引用。
所以,在加载图片前,首先会从该图片的软引用中调用获取(get)方法获取该图片的强引用(Strong Reference),如果get方法返回null,说明在系统内存不足时,系统已将其回收;如果不为null,说明该图片已加载在内存中,直接读取即可。
第六步:在hashmap中删除对应图片的信息。
第七步:显示默认图片;然而,如果图片未加载过或者已被系统回收,由加载模块开始加载图片,并通过回调函数首先将状态信息返回给用户界面(UI),这样以便在用户界面(UI)上及时更新当前加载状态,增强了用户体验,此为加载状态的显示提示过程。
第八步:判断加载图片线程是否已经开启,如果未开启,开启加载图片线程,执行下一步;如果已开启则直接执行步骤第十四步。
第九步:判断是否要停止加载图片,如果是,执行步骤第十八步,否则执行下一步。
第十步:判断图片加载队列是否大于0,如果是,执行下一步;如果不是,线程等待(wait);因此,图片加载线程在加载队列为空的情况下,会将线程挂起;如果有新的加载任务,线程被唤醒继续执行,除非主动调用停止(stop),该线程不会终止。
第十一步:删除加载队列中的第一个,读取加载队列下一个图片信息,如果加载队列下一个图片信息为空,执行步骤第十七步,否则标记当前加载图片,开始调用图片;判断调用图片过程中,是否出现内存溢出错误(Out Of Memory Error),如果不是执行第十三步,如果是则执行下一步。
第十二步:调用java回收机制,进行垃圾回收,然后重新加载图片,执行步骤第九步。
第十三步:图片加载完成,利用处理机制(handler机制)调用回调函数,刷新用户界面(UI)的显示,将软引用中已加载完成的图片加载地址及对应的软引用对象添加进hashmap,执行步骤第十七步;所以,图片加载完成后,通过回调函数将该图片更新到用户界面(UI)进行显示,并且创建该图片的软引用对象,需要再次显示该图片时,则可以直接在软引用中获取该图片,加快了显示速度。
第十四步:判断当前图片是否正在加载,如果是,不处理,直接返回;如果不是,则判断加载队列是否已包含此图片,如果是执行下一步,否则执行步骤第十六步。
第十五步:判断当前图片是否需要提前下载,如果是,将此图片在加载队列中的位置设置为第一个,如果不是,则不处理,直接返回。
第十六步:判断当前图片是否需要提前下载,如果是,将此图片插入加载队列中第一个;如果不是,将此图片插入加载队列的队尾;因此,图片在添加进加载队列时,可以设置其优先级,如果该图片在用户界面(UI)上需要立即显示,则提高该图片加载的优先级,以便优先加载该图片。
第十七步:通知加载线程继续下载,执行步骤第九步。
第十八步:停止加载线程。
由以上过程可知,图片加载线程是一个循环执行的过程,每次加载完成一张图片,首先删除加载队列中该图片信息,然后在加载队列取下一张需要加载的图片信息,继续再加载。如果加载队列为空,则将线程置为等待(wait)状态,一旦有新的加载图片需求,线程立即启动进行加载图片,直至调用停止线程接口,线程才会停止。该线程采用软引用机制,上层无需关心图片的回收问题,直接由系统托管,当内存不足时,系统会自动将图片回收;而且图片加载完成以后,在内存充足的情况下,常驻内存,在再次使用该图片时,无需重新加载,避免了重复加载的过程,显示速度快;用户界面(UI)层可直接通过回调函数更新图片的加载状态,实现过程简单方便。
综上所述,本发明基于Android系统的图片加载装置及方法,通过在软引用中存储图片及增加对软引用进行垃圾回收,避免了图面的重复下载,实现了所需下载图片的快速调用,使Android系统在加载大量图片时,降低了对内存的依赖,在低性能的系统中也能流畅运行,增强了用户体验。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种基于Android系统的图片加载方法,其特征在于,所述基于Android系统的图片加载方法包括以下步骤:A、发出图片加载任务的指令,并初始化存储图片的软引用;B、判断所述软引用中是否存储有所要显示的图片;C、若所述软引用中没有存储所述所要显示的图片,则运行图片加载线程进行加载;若所述软引用中存储有所述所要显示的图片,则直接进入步骤F;D、若内存不充足,则自动回收所述软引用中存储的图片直至所述内存充足;E、所述所要显示的图片加载完成,并存储于所述软引用中;F、从所述软引用中直接读取所述所要显示的图片并显示;
所述步骤F具体为:所述图片加载线程调用回调函数通知主线程从所述软引用中直接读取所述所要显示的图片并显示;
所述回调函数的执行步骤包括:F1、初始化用于连接所述主线程与所述图片加载线程的接口类;F2、所述主线程注册所述回调函数,及设置提示图片加载状态的信息,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息;F3、所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片;F4、将查询结果反馈至所述主线程。
2.根据权利要求1所述的基于Android系统的图片加载方法,其特征在于,所述步骤F4具体包括:当所述查询结果是所述软引用中存在所述所要显示的图片时,判断所述所要显示的图片是否已被回收,若否,则控件显示已加载的图片,若是,则所述控件显示所述提示图片加载状态的信息;当所述查询结果是所述软引用中不存在所述所要显示的图片时,则所述控件显示所述提示图片加载状态的信息。
3.根据权利要求1所述的基于Android系统的图片加载方法,其特征在于,在所述步骤A之前还包括预设步骤,具体包括创建图片的数据结构,初始化图片列表、设置存储图片的所述软引用及构建哈希表的步骤;将所要加载的图片信息填充到所述数据结构的步骤;注册对应所述所要加载的图片的回调函数的步骤。
4.根据权利要求3所述的基于Android系统的图片加载方法,其特征在于,所述数据结构包括图片加载的地址、加载索引及对应每一图片的回调函数对象,所述图片加载的地址用于记录图片加载的路径,所述加载索引用于记录图片在所述图片列表中的位置,所述对应每一图片的回调函数对象用于被所述回调函数调用。
5.根据权利要求3所述的基于Android系统的图片加载方法,其特征在于,所述步骤E具体包括:所述所要显示的图片加载完成,为所述所要显示的图片创建软引用,将所述所要显示的图片存储于所述软引用中,在所述哈希表中建立所述所要显示的图片的地址与存储所述所要显示的图片的软引用的对应关系。
6.根据权利要求1至5中任一项所述的基于Android系统的图片加载方法,其特征在于,所述图片加载线程加载所述所要显示的图片的步骤包括:循环步骤,图片加载线程循环运行,判断是否有图片加载任务;图片加载队列运行步骤,当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息;加载步骤,若所述所要加载的图片的图片信息不为空,则加载所述所要加载的图片。
7.根据权利要求6所述的基于Android系统的图片加载方法,其特征在于,在所述加载步骤进行所述所要加载的图片的加载时,并行运行JAVA垃圾回收程序,当判断出所述所要加载的图片在加载过程中出现内存不足时,所述JAVA垃圾回收程序回收内存垃圾,然后继续加载所述所要加载的图片,直至加载完成。
8.一种基于Android系统的图片加载装置,其特征在于,所述基于Android系统的图片加载装置包括:初始化模块,用于在发出图片加载任务的指令时,初始化存储图片的软引用;判断模块,用于判断所述软引用中是否存储有所要显示的图片;图片加载模块,在所述软引用中没有存储所述所要显示的图片时,加载所述所要显示的图片;回收模块,用于在内存不充足时,自动回收所述软引用中存储的图片直至所述内存充足;存储模块,用于在加载完成所述所要显示的图片后,存储所述所要显示的图片至所述软引用中;调用显示模块,用于调用所述软引用中存储的所述所要显示的图片并显示;
所述调用显示模块包括回调函数模块,用于所述图片加载模块和主线程之间的接口;
所述回调函数模块包括: 接口类初始化单元,用于初始化连接所述主线程与所述图片加载线程的接口类;注册回调函数与加载提示单元,用于所述主线程注册所述回调函数,及设置提示图片加载状态的信息,其中,所述提示图片加载状态的信息包括图片正在加载的信息和图片加载失败的信息;查询单元,用于所述回调函数从所述图片加载线程的所述软引用中查询所述所要显示的图片;反馈单元,用于依据所述查询单元的查询结果,反馈所述所要显示的图片的加载状态至所述主线程。
9.根据权利要求8中任一项所述的基于Android系统的图片加载装置,其特征在于,所述图片加载模块包括:循环单元,用于循环判断是否有图片加载任务;图片加载队列运行单元,用于当图片加载队列大于0时,删除图片加载队列中的第一张图片,然后读取所要加载的图片的图片信息;加载单元,用于在所述所要加载的图片的图片信息不为空时,加载所述所要加载的图片。
10.根据权利要求9所述的基于Android系统的图片加载装置,其特征在于,所述图片加载模块还包括: JAVA垃圾回收单元,用于在加载所述所要加载的图片时,判断出所述所要加载的图片在加载过程中出现内存不足的情况下回收内存垃圾。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110454870.2A CN102541605B (zh) | 2011-12-30 | 2011-12-30 | 基于Android系统的图片加载方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110454870.2A CN102541605B (zh) | 2011-12-30 | 2011-12-30 | 基于Android系统的图片加载方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102541605A CN102541605A (zh) | 2012-07-04 |
CN102541605B true CN102541605B (zh) | 2014-10-29 |
Family
ID=46348573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110454870.2A Expired - Fee Related CN102541605B (zh) | 2011-12-30 | 2011-12-30 | 基于Android系统的图片加载方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102541605B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109218357A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 网络广告加载的方法、存储介质、电子设备及系统 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103793380B (zh) * | 2012-10-26 | 2017-08-04 | 北京新媒传信科技有限公司 | 一种下载应用中图片的方法和系统 |
CN103077014A (zh) * | 2012-12-25 | 2013-05-01 | 深圳Tcl新技术有限公司 | 基于界面生命周期回收图片的方法和装置 |
CN103150180B (zh) * | 2013-02-07 | 2016-03-23 | 宝龙计算机系统(湖南)有限公司 | 一种类unix操作系统的安装及运行方法和装置 |
CN103309749A (zh) * | 2013-06-25 | 2013-09-18 | 四川九洲电器集团有限责任公司 | 一种基于安卓系统图片资源的内存释放方法 |
CN103324740B (zh) * | 2013-06-28 | 2017-08-25 | 深圳市九洲电器有限公司 | 一种图片显示方法、装置及机顶盒 |
CN103399822B (zh) * | 2013-08-14 | 2017-05-24 | 上海斐讯数据通信技术有限公司 | 用于解决申请图片内存不足的内存分配方法及系统 |
CN104423996B (zh) * | 2013-09-04 | 2019-02-01 | 腾讯科技(深圳)有限公司 | 视图刷新方法和装置 |
CN104657380A (zh) * | 2013-11-20 | 2015-05-27 | 青岛海信移动通信技术股份有限公司 | 一种图片加载方法和装置 |
CN104657378A (zh) * | 2013-11-20 | 2015-05-27 | 青岛海信移动通信技术股份有限公司 | 一种文件缓存方法及装置 |
CN103823690B (zh) * | 2013-12-05 | 2017-12-12 | Tcl集团股份有限公司 | 一种在线图片加载方法和系统 |
CN104714897A (zh) * | 2013-12-13 | 2015-06-17 | 航天信息股份有限公司 | 一种android平台下基于缓存的列表处理方法 |
CN104239101A (zh) * | 2014-09-11 | 2014-12-24 | 四川长虹电器股份有限公司 | 基于安卓系统的设备的网络图片的缓存方法 |
CN105573767A (zh) * | 2014-10-10 | 2016-05-11 | 惠州市德赛西威汽车电子股份有限公司 | 一种车载娱乐系统中界面图片加载方法 |
CN105808599A (zh) * | 2014-12-31 | 2016-07-27 | 高德软件有限公司 | 信息加载方法、装置及电子设备 |
CN105068850B (zh) * | 2015-09-11 | 2018-08-10 | 厦门喜鱼网络科技有限公司 | 一种资源包加载装置、方法和计算设备 |
CN105607900A (zh) * | 2015-11-26 | 2016-05-25 | 小米科技有限责任公司 | 显示对象的处理方法及装置 |
CN105653135B (zh) * | 2015-12-31 | 2019-02-19 | 北京金山安全软件有限公司 | 一种图片的显示方法、装置及电子设备 |
CN105824533B (zh) * | 2016-03-21 | 2019-06-18 | 青岛海信移动通信技术股份有限公司 | 一种图片加载方法、装置及终端 |
CN105893268A (zh) * | 2016-03-24 | 2016-08-24 | 北京小米移动软件有限公司 | 缓存图片处理方法和装置 |
CN106020780B (zh) * | 2016-05-19 | 2019-10-29 | 努比亚技术有限公司 | 图片加载装置和方法 |
CN106155741B (zh) * | 2016-06-30 | 2019-10-08 | 努比亚技术有限公司 | 一种避免应用程序无响应的处理装置及方法 |
CN106204668B (zh) * | 2016-07-01 | 2020-11-10 | 腾讯科技(深圳)有限公司 | 图片解码方法和装置 |
CN106354811A (zh) * | 2016-08-29 | 2017-01-25 | 苏州蓝海彤翔系统科技有限公司 | 一种处理图片输出异常状态的方法、装置及系统 |
CN106649130A (zh) * | 2016-12-28 | 2017-05-10 | 乐蜜科技有限公司 | 内存空间回收方法、装置和电子设备 |
CN108874477B (zh) * | 2017-05-11 | 2021-06-15 | 武汉斗鱼网络科技有限公司 | 一种显示静态图片和动态图片的方法和装置 |
CN107357650B (zh) * | 2017-06-06 | 2020-12-15 | 武汉斗鱼网络科技有限公司 | 一种基于图片资源的内存自动释放方法及系统 |
CN107463627B (zh) * | 2017-07-11 | 2020-08-11 | 深圳市云领天下科技有限公司 | 一种图片加载方法及终端 |
CN108595235B (zh) * | 2018-03-20 | 2021-10-19 | 车音智能科技有限公司 | 一种图片加载方法及装置 |
CN110413911B (zh) * | 2018-04-26 | 2023-08-11 | 腾讯科技(深圳)有限公司 | 网络图片加载方法、装置、终端设备及存储介质 |
CN110412947B (zh) * | 2018-04-28 | 2021-01-08 | 北京北方华创微电子装备有限公司 | 工业设备控制方法及其系统、存储设备 |
CN110928935B (zh) * | 2018-09-19 | 2023-11-14 | 阿里巴巴集团控股有限公司 | 数据的访问命令处理方法、装置和系统 |
CN109445895A (zh) * | 2018-10-26 | 2019-03-08 | 深圳易嘉恩科技有限公司 | Android平台非失真加载大尺寸图片的方法及装置 |
CN110032421B (zh) * | 2019-04-18 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 内存中图集的管理方法、装置、终端及存储介质 |
CN110175053B (zh) * | 2019-04-24 | 2023-10-27 | 创新先进技术有限公司 | 图片加载方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100363893C (zh) * | 2004-03-27 | 2008-01-23 | 鸿富锦精密工业(深圳)有限公司 | 加载系统及方法 |
CN101729753B (zh) * | 2009-11-06 | 2011-09-28 | 深圳市同洲电子股份有限公司 | 一种java应用中加载图片的方法和装置 |
CN101794567B (zh) * | 2010-02-10 | 2014-01-01 | 中兴通讯股份有限公司 | 图片加载的方法及终端 |
-
2011
- 2011-12-30 CN CN201110454870.2A patent/CN102541605B/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109218357A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 网络广告加载的方法、存储介质、电子设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102541605A (zh) | 2012-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102541605B (zh) | 基于Android系统的图片加载方法和装置 | |
US20240095043A1 (en) | Execution of sub-application processes within application program | |
CN100511156C (zh) | 强制性地终止输入/输出操作阻止的线程的设备和方法 | |
CN105335253A (zh) | 创建虚拟机系统盘快照的方法和装置 | |
CN106201613A (zh) | 预热软件安装 | |
CN104657380A (zh) | 一种图片加载方法和装置 | |
KR20110098567A (ko) | 최소 부트 이미지의 생성 방법 및 장치 | |
TW201301029A (zh) | 具有增強型應用程式元資料之記憶體管理器 | |
CN105389186A (zh) | 一种Java应用的热部署方法及系统 | |
CN111190687A (zh) | 一种容器镜像的构建方法、装置、设备及存储介质 | |
CN101470645A (zh) | 一种高速缓存数据恢复的方法和装置 | |
CN110109868A (zh) | 用于索引文件的方法、装置和计算机程序产品 | |
CN108228206A (zh) | 一种应用程序管理方法及装置 | |
CN109597631A (zh) | 一种进程的升级方法、装置及电子设备 | |
CN111897599A (zh) | 基于微核模型插件模式的服务方法、装置、设备及存储介质 | |
CN112214388A (zh) | 内存监控方法、装置、设备及计算机可读存储介质 | |
CN112262378B (zh) | 脱水文件的层级的水合 | |
US20130262532A1 (en) | Garbage collection for virtual environments | |
CN114385349A (zh) | 容器组部署方法和装置 | |
KR102456017B1 (ko) | 응용 프로그램간 파일 공유 장치 및 방법 | |
CN113384872B (zh) | 在微端中处理信息资源的方法、装置、电子设备及存储介质 | |
CN115658109A (zh) | 微服务热部署方法、系统、电子设备和存储介质 | |
JP2006031203A (ja) | 車載情報端末 | |
CN110704051B (zh) | 一种Unity的界面绑定数据方法 | |
CN118120212A (zh) | 一种文件去重方法、装置和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141029 |
|
CF01 | Termination of patent right due to non-payment of annual fee |