CN107357650B - 一种基于图片资源的内存自动释放方法及系统 - Google Patents
一种基于图片资源的内存自动释放方法及系统 Download PDFInfo
- Publication number
- CN107357650B CN107357650B CN201710419328.0A CN201710419328A CN107357650B CN 107357650 B CN107357650 B CN 107357650B CN 201710419328 A CN201710419328 A CN 201710419328A CN 107357650 B CN107357650 B CN 107357650B
- Authority
- CN
- China
- Prior art keywords
- picture
- memory
- loaded
- loading
- bitmap object
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000011068 loading method Methods 0.000 claims abstract description 91
- 238000011084 recovery Methods 0.000 claims abstract description 52
- 230000007246 mechanism Effects 0.000 claims abstract description 19
- 230000008569 process Effects 0.000 claims description 12
- 238000004891 communication Methods 0.000 claims description 3
- 238000012423 maintenance Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 6
- 230000006870 function Effects 0.000 abstract description 4
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000004064 recycling Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000007430 reference method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Abstract
本发明提供一种基于图片资源的内存自动释放方法及系统,所述的方法包括:利用可缓存线程池对图片资源进行异步加载;每加载一张图片时,构建与加载图片对应的map对象,将所有的map对象存放于list关系表中;按照预设时间间隔,遍历整个list关系表,根据map对象中图片加载后在内存中的存储地址获得位图bitmap对象;若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收。本发明选择具有缓存功能的线程池来异步加载图片,有效地解决了图片过大导致ANR的问题发生,以及能够定期清理内存中的bitmap对象,达到自动释放内存的目的,能够确保在系统资源紧张的时候,也不会引起系统内存异常的问题发生,提高了开发者的开发效率和降低程序出现异常的可能性。
Description
技术领域
本发明涉及内存释放技术领域,更具体地,涉及一种基于图片资源的内存自动释放方法及系统。
背景技术
在Android开发过程中图片是一个经常使用到的组件,Android中通常可以使用Bitmap对象来承载一张图片。图片在内存中的开销是非常大的,目前在开发过程中,通常是开发人员手动实例化和释放bitmap对象。采用这种方式,如果当我们已经不再使用该图片但是却忘记释放该bitmap的时候就有可能会引起内存泄漏,严重的时候会引起OOM(内存越界)异常。
发明内容
本发明提供一种克服上述问题或者至少部分地解决上述问题的一种基于图片资源的内存自动释放方法及系统。
根据本发明的第一方面,提供了一种基于图片资源的内存自动释放方法,包括:
S1,在图片加载器中利用可缓存线程池对图片资源进行异步加载;
S2,每加载一张图片时,构建于加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;
S3,按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得位图bitmap对象;
S4,若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
本发明的有益效果为:选择具有缓存功能的线程池来异步加载图片,有效地解决了图片过大导致ANR(Application Not Responding,应用没有响应)的问题发生,以及能够定期清理内存中的bitmap对象,达到自动释放内存的目的,能够确保在系统资源紧张的时候,也不会引起系统内存异常的问题发生,提高了开发者的开发效率和降低程序出现异常的可能性。
在上述技术方案的基础上,本发明还可以作如下改进。
进一步的,所述可缓存线程池包括多个可缓存子线程,所述步骤S1具体包括:
当可缓存线程池接收到图片资源加载请求时,根据需要加载的图片资源的个数,开启相应个数的可缓存子线程,在可缓存子线程中实现相应图片资源的加载。
进一步的,所述在可缓存子线程中实现相应图片资源的加载具体包括:
在可缓存子线程中定义任务类,在所述任务类中调用bitmap工厂类中的图片资源加载方法来实现图片资源的加载。
进一步的,所述步骤S1还包括:
多个可缓存子线程可同时对多张相同的图片进行加载;
所述步骤S2中的map对象中还包括同一时刻同一张图片的加载次数,其中,在map对象中,同一张图片加载地址相同,同一张图片每一次加载后在内存中的存储地址不同。
进一步的,所述步骤S2还包括:
将加载后的图片资源的bitmap对象申明为弱引用关系;
当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存。
进一步的,所述步骤S3具体包括:
S31,在图片加载器中设计定时器,当定时器达到超时阈值时,遍历整个list关系表;
S32,根据list关系表中的每一个map对象中记录的图片加载后在内存中的存储地址,逐一获取在内存中的bitmap对象;
S33,若bitmap对象满足回收条件,则对该bitmap对象回收,以对内存进行释放,否则,对该bitmap对象不进行回收。
进一步的,所述步骤S33具体包括:
若bitmap对象为不可见状态,则满足回收条件,若bitmap对象为可见状态,则不满足回收条件;
其中,若bitmap对象当前在页面上显示,则将bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。
根据本发明的第二方面,提供了一种基于图片资源的内存自动释放系统,包括:
异步加载模块,用于利用可缓存线程池对图片资源进行异步加载;
关系表维护模块,用于每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;
获取模块,用于按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象;
回收释放模块,用于若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
进一步的,还包括申明模块;
申明模块,用于将加载后的图片资源的bitmap对象申明为弱引用关系;
所述回收释放模块还用于:
当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存。
根据本发明的第三方面,包括处理器(processor)、存储器(memory)和总线;
所述处理器和存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
在图片加载器中利用可缓存线程池对图片资源进行异步加载;
每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;
按照固定的时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象;
若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
附图说明
图1为本发明一个实施例的基于图片资源的内存自动释放方法流程图;
图2为本发明另一个实施例的基于图片资源的内存自动释放系统连接框图;
图3为本发明又一个实施例的基于图片资源的内存自动释放系统的整体连接框图;
图4为本发明再一个实施例的基于图片资源的内存自动释放方法的设备连接框图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1,提供了本发明一个实施例的基于图片资源的内存自动释放方法,包括:S1,在图片加载器中利用可缓存线程池对图片资源进行异步加载;S2,每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;S3,按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象;S4,若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
图片在内存中的开销是非常大的,在图片加载的过程中,开发人员手动实例化和释放承载图片的位图bitmap对象,若开发人员忘记释放bitmap对象时,就可能会引起内存泄漏,严重时甚至会引起内存越界异常。因此,本实施例提供一套内存自动释放的机制。
为了不引起加载图片的主线程发现卡顿的现象和出现ANR异常,本实施例中在图片加载器中利用可缓存线程池来对图片进行异步加载,避免现有的采用主线程对图片资源进行同步加载所引起的卡顿现象。利用可缓存线程池对图片资源加载的过程中,每加载一张图片资源,就构建一个与加载图片对应的map对象,其中,map对象中存放有图片加载地址,即图片的来源,和图片加载后在内存中的存储地址。为了便于对所有的加载图片的定位和管理,创建一个list关系表,将每一个map对象均存放于list关系表中。
为了能够定期对内存中的图片进行清理,按照预设时间间隔,比如,每隔一分钟,就会对整个list关系表进行遍历,并根据list关系表中每一个map对象中的图片加载后在内存中的存储地址,来获取对内存中的bitmap对象,内存中一个存储地址对应有一个bitmap对象。然后对获取的bitmap对象进行判断,该bitmap对象是否满足回收条件,若满足,则对该bitmap对象进行回收,若不满足条件,则对bitmap对象不进行回收。
本实施例选择具有缓存功能的线程池来异步加载图片,有效地解决了图片过大导致ANR的问题发生,以及能够定期清理内存中的bitmap对象,达到自动释放内存的目的,能够确保在系统资源紧张的时候,也不会引起系统内存异常的问题发生,提高了开发者的开发效率和降低程序出现异常的可能性。
在本发明的一个实施例中,所述可缓存线程池包括多个可缓存子线程,所述步骤S1具体包括:当可缓存线程池接收到图片资源加载请求时,根据需要加载的图片资源的个数,开启相应个数的可缓存子线程,在可缓存子线程中实现相应图片资源的加载。
在利用线程池对图片资源进行异步加载的过程中,通常有多种线程池,可缓存线程池、定长线程池、周期性定长线程池和单一线程池。由于本方案需要实现的是图片资源的异步加载任务,且同时为了后续能够复用线程池的线程,本实施例选择可缓存的线程池来异步加载图片资源。
当可缓存线程池接收到外部的图片资源加载请求时,根据需要加载的图片资源的个数,开启线程池中相应个数的可缓存子线程,每一个可缓存子线程负责实现一张图片的加载。
本实施例通过在子线程中实现图片资源的异步加载,而不是在主线程中实现,这样即使是图片资源再大也不会引起主线程的卡顿和出现ANR等异常现象。
在本发明的另一个实施例中,所述在可缓存子线程中实现相应图片资源的加载具体包括:在可缓存子线程中定义任务类,在所述任务类中调用bitmap工厂类中的图片资源加载方法来实现图片资源的加载。
bitmap对象常规的加载是通过调用bitmapFactory,即bitmap的工厂类来对bitmap对象进行加载的。通常情况下是可以直接在主线程中通过bitmap工厂类来对图片资源进行加载的,加载方式是通过调用bitmap工厂类中的图片资源加载方法decodeFile来加载图片为bitmap对象。
但是在特殊情况下,比如,图片很大的时候,此时如果直接在主线程中调用decodeFile方法来加载超大图片,则会由于加载时间过长导致主线程卡死出现ANR异常。
本实施例中每一个可缓存子线程实现图片资源的异步加载的具体过程与上述相类似,在每一个可缓存子线程中定义任务类,在任务类中调用bitmap工厂类中的图片资源加载方法decodeFile来实现图片资源的加载。
在本发明的一个实施例中,所述步骤S1还包括:多个可缓存子线程可同时对多张相同的图片进行加载;所述步骤S2中的map对象中还包括同一时刻同一张图片的加载次数,其中,在map对象中,同一张图片加载地址相同,同一张图片每一次加载后在内存中的存储地址不同。
需要说明的是,可缓存线程池中的多个子线程是可以同时并行对图片资源进行加载的,每一个子线程负责加载一张图片。当可缓存线程池接收到外部的图片资源加载请求时,比如,需要同时加载7张图片,需要加载的7张图片中有4张图片时同一张图片,其它3张图片均属于不同的图片,若可缓存线程池中当前只有5个可缓存子线程,而可缓存线程池此时需要开启7个子线程,因此,这个时候可缓存线程池需要新建2个子线程,使得可缓存线程池中存在7个子线程。其中,一个子线程负责加载一张图片资源,可缓存线程池中的7个子线程可同时对7张图片进行加载。
当7张图片资源均加载完成后,需要构建4个map对象,map对象以键值对的方式来存储加载图片的引用关系,其中,map中的key值是需要确保唯一性的,而针对每个不同的图片,图片加载地址不同。因此,本实施例利用图片加载地址作为map对象的key值。一个map对象中对应一个图片,key值是图片加载地址,value值是图片的一次加载过程中加载的次数,比如,上述同时加载的7张图片中有4张图片属于同一张图片,因此,map对象中的key值为这张图片加载地址,而value值为加载次数4。而对于这7张图片,加载后在内存中的存储地址有7个,每一个存储地址只能存放一张图片。
本实施例通过巧妙的设计,使用图片加载地址作为map对象中的key值,并将在一次加载过程同一张图片加载的次数以及每一张图片加载后在内存中的存储地址作为map对象的value值,对加载的图片进行描述。为了存储多个图片的引用关系,构建了一个list关系表,在list关系表中存放多个map对象以达到维护所有加载图片的引用关系的列表链,以方便后期通过这个列表链对图片进行定位和管理。
在本发明的一个实施例中,所述步骤S2还包括:将加载后的图片资源的bitmap对象申明为弱引用关系;当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存。
为了确保bitmap对象在系统资源紧张的时候能够及时有效地被系统回收,本实施例将加载后的图片资源的bitmap对象申明为弱引用关系,具体是使用WeakReference弱引用方法在加载后的bitmap对象上套一层,这样bitmap对象在系统中就具备弱引用关系。具备弱引用关系的对象有一个优点,当系统资源紧张的时候,比如,系统资源低于一个阈值时,系统会触发垃圾回收机制对内存中的垃圾进行回收,如果垃圾回收后,内存资源依然紧张,则此时系统会主动回收弱引用关系的对象,确保系统不会出现内存的异常。因此,通过在bitmap对象上套一层弱引用关系来确保系统内存回收器能够有效地对内存进行回收处理。
在本发明的另一个实施例中,所述步骤S3具体包括:S31,在图片加载器中设计定时器,当定时器达到超时阈值时,遍历整个list关系表;S32,根据list关系表中的每一个map对象中记录的图片加载后在内存中的存储地址,逐一获取在内存中的bitmap对象;S33,若bitmap对象满足回收条件,则对该bitmap对象回收,以对内存进行释放,否则,对该bitmap对象不进行回收。
在对内存中的bitmap对象自动销毁回收的过程中,在图片加载器中设计定时器Timer,然后给该定时器Timer设置一个超时阈值,当定时器Timer达到超时阈值时,比如,定时器Timer达到1分钟时,遍历整个list关系表,并根据list关系表中的每一个map对象中记录的图片加载后在内存的存储地址,找到对应的bitmap对象,并判断bitmap对象是否满足回收条件。若bitmap对象满足回收条件,则对bitmap对象进行回收,以释放内存;若bitmap对象不满足回收条件,则不进行回收。
本实施例通过在图片加载器中设计定时器来定期对内存中的bitmap对象自动进行回收,即使开发者在使用bitmap对象时没有主动回收bitmap对象,也会在下一次对bitmap对象进行自动回收,从而有效地避免了内存越界的异常。
在本发明的另一个实施例中,所述步骤S33具体包括:若bitmap对象为不可见状态,则满足回收条件,若bitmap对象为可见状态,则不满足回收条件;其中,若bitmap对象当前在页面上显示,则将bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。
上述实施例中判断bitmap对象时候满足回收条件具体为,若bitmap对象当前为不可见状态,则该bitmap对象满足回收条件,那么对该bitmap对象进行回收。若bitmap对象为可见状态,则不满足回收条件,则不对给bitmap对象进行回收。其中,若bitmap对象当前在前台的页面上显示,则将该bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。也就是说当bitmap对象当前在前台的页面上正在显示时,则不对该bitmap对象回收,若bitmap对象当前没有的页面上显示,则对该bitmap对象进行回收。
参见图2,提供了本发明另一个实施例的基于图片资源的内存自动释放系统,包括异步加载模块21、关系表维护模块22、获取模块23和回收释放模块24。
异步加载模块21,用于利用可缓存线程池对图片资源进行异步加载。
关系表维护模块22,用于每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中。
获取模块23,用于按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象。
回收释放模块24,用于若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
其中,所述可缓存线程池包括多个可缓存子线程,所述异步加载模块21具体用于:当接收到图片资源加载请求时,根据需要加载的图片资源的个数,开启可缓存线程池中相应个数的可缓存子线程,在可缓存子线程中实现相应图片资源的加载。
异步加载模块21,用于在可缓存子线程中实现相应图片资源的加载具体包括:在可缓存子线程中定义任务类,在所述任务类中调用bitmap工厂类中的图片资源加载方法来实现图片资源的加载。
其中,多个可缓存子线程可同时对多张相同的图片进行加载;map对象中还包括同一时刻同一张图片的加载次数,其中,在map对象中,同一张图片加载地址相同,同一张图片每一次加载后在内存中的存储地址不同。
参见图3,基于图片资源的内存自动释放系统还包括申明模块25和遍历模块26,申明模块25用于将加载后的图片资源的bitmap对象申明为弱引用关系。
所述回收释放模块24,具体用于当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存。
遍历模块26,用于当图片加载器中的定时器达到超时阈值时,遍历整个list关系表。
所述获取模块23具体用于:根据list关系表中的每一个map对象中记录的图片加载后在内存中的存储地址,逐一获取在内存中的bitmap对象。
所述回收释放模块24,具体用于若bitmap对象满足回收条件,则对该bitmap对象回收,以对内存进行释放,否则,对该bitmap对象不进行回收。
其中,若bitmap对象为不可见状态,则满足回收条件,若bitmap对象为可见状态,则不满足回收条件;其中,若bitmap对象当前在页面上显示,则将bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。
图4示出本申请实施例的基于图片资源的内存自动释放放方法的设备的结构框图。
参照图4,所述基于图片资源的内存自动释放放方法的设备,包括:处理器(processor)401、存储器(memory)402和总线403;其中,所述处理器401和存储器402通过所述总线403完成相互间的通信。
所述处理器401用于调用所述存储器402中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:在图片加载器中利用可缓存线程池对图片资源进行异步加载;每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的地址获得bitmap对象若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:在图片加载器中利用可缓存线程池对图片资源进行异步加载;每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:在图片加载器中利用可缓存线程池对图片资源进行异步加载;每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,将所有的map对象存放于list关系表中;按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得bitmap对象若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的基于图片资源的内存自动释放放方法的设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。
本发明提供一种基于图片资源的内存自动释放方法及系统,选择具有缓存功能的线程池来异步加载图片,有效地解决了图片过大导致ANR的问题发生,以及定义一个轮询定时器来对图片进行有效的清理从而达到了bitmap对象自动清理的目的,同时为bitmap对象包裹一层弱引用关系,能够确保在系统资源紧张的时候,也不会引起系统内存异常的问题发生,提高了开发者的开发效率和降低程序出现异常的可能性。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于图片资源的内存自动释放方法,其特征在于,包括:
S1,在图片加载器中利用可缓存线程池对图片资源进行异步加载;
S2,每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,所述map对象中的key值为所述图片加载地址,所述map对象中的value值为所述加载图片的一次加载过程中的加载次数,将所有的map对象存放于list关系表中;
S3,按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得位图bitmap对象;
S4,若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放;
所述步骤S2还包括:
将加载后的图片资源的bitmap对象申明为弱引用关系;
当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存;
其中,若bitmap对象为不可见状态,则满足回收条件,若bitmap对象为可见状态,则不满足回收条件;
其中,若bitmap对象当前在页面上显示,则将bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。
2.如权利要求1所述的基于图片资源的内存自动释放方法,其特征在于,所述可缓存线程池包括多个可缓存子线程,所述步骤S1具体包括:
当可缓存线程池接收到图片资源加载请求时,根据需要加载的图片资源的个数,开启相应个数的可缓存子线程,在可缓存子线程中实现相应图片资源的加载。
3.如权利要求2所述的基于图片资源的内存自动释放方法,其特征在于,所述在可缓存子线程中实现相应图片资源的加载具体包括:
在可缓存子线程中定义任务类,在所述任务类中调用bitmap工厂类中的图片资源加载方法来实现图片资源的加载。
4.如权利要求3所述的基于图片资源的内存自动释放方法,其特征在于,所述步骤S1还包括:
多个可缓存子线程可同时对多张相同的图片进行加载;
所述步骤S2中的map对象中还包括同一时刻同一张图片的所述加载次数,其中,在map对象中,同一张图片加载地址相同,同一张图片每一次加载后在内存中的存储地址不同。
5.如权利要求1所述的基于图片资源的内存自动释放方法,其特征在于,所述步骤S3具体包括:
S31,在图片加载器中设计定时器,当定时器达到超时阈值时,遍历整个list关系表;
S32,根据list关系表中的每一个map对象中记录的图片加载后在内存中的存储地址,逐一获取在内存中的bitmap对象;
S33,若bitmap对象满足回收条件,则对该bitmap对象回收,以对内存进行释放,否则,对该bitmap对象不进行回收。
6.一种基于图片资源的内存自动释放系统,其特征在于,包括:
异步加载模块,用于利用可缓存线程池对图片资源进行异步加载;
关系表维护模块,用于每加载一张图片时,构建与加载图片对应的map对象,其中,map对象中存放有图片加载地址和图片加载后在内存中的存储地址,所述map对象中的key值为所述图片加载地址,所述map对象中的value值为所述加载图片的一次加载过程中的加载次数,将所有的map对象存放于list关系表中;
获取模块,用于按照预设时间间隔,遍历整个list关系表,根据list关系表中图片加载后在内存中的存储地址获得位图bitmap对象;
回收释放模块,用于若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收,实现对内存的释放;
还包括申明模块;
申明模块,用于将加载后的图片资源的bitmap对象申明为弱引用关系;
所述回收释放模块还用于:
当内存资源紧张时,触发垃圾回收机制对内存中的垃圾回收,若垃圾回收后内存资源依然紧张,则主动回收弱引用关系的bitmap对象,以释放内存;
其中,若bitmap对象为不可见状态,则满足回收条件,若bitmap对象为可见状态,则不满足回收条件;
其中,若bitmap对象当前在页面上显示,则将bitmap对象标记为可见状态,否则,将bitmap对象标记为不可见状态。
7.一种基于图片资源的内存自动释放方法的设备,其特征在于,包括处理器(processor)、存储器(memory)和总线;
所述处理器和存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1-5任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710419328.0A CN107357650B (zh) | 2017-06-06 | 2017-06-06 | 一种基于图片资源的内存自动释放方法及系统 |
PCT/CN2017/120148 WO2018223677A1 (zh) | 2017-06-06 | 2017-12-29 | 一种基于图片资源的内存自动释放方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710419328.0A CN107357650B (zh) | 2017-06-06 | 2017-06-06 | 一种基于图片资源的内存自动释放方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107357650A CN107357650A (zh) | 2017-11-17 |
CN107357650B true CN107357650B (zh) | 2020-12-15 |
Family
ID=60271796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710419328.0A Active CN107357650B (zh) | 2017-06-06 | 2017-06-06 | 一种基于图片资源的内存自动释放方法及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107357650B (zh) |
WO (1) | WO2018223677A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357650B (zh) * | 2017-06-06 | 2020-12-15 | 武汉斗鱼网络科技有限公司 | 一种基于图片资源的内存自动释放方法及系统 |
CN108345505B (zh) * | 2018-02-02 | 2022-08-30 | 珠海金山网络游戏科技有限公司 | 一种多线程资源管理方法和系统 |
CN108595262B (zh) * | 2018-03-29 | 2021-06-22 | 北京奇艺世纪科技有限公司 | 数据处理方法及装置 |
CN108845792B (zh) * | 2018-04-12 | 2022-01-04 | 武汉斗鱼网络科技有限公司 | 一种类工厂注册的方法、装置及电子设备 |
CN108897532B (zh) * | 2018-04-12 | 2022-01-04 | 武汉斗鱼网络科技有限公司 | 一种类工厂注册的方法、装置及电子设备 |
CN108762916B (zh) * | 2018-05-03 | 2022-12-13 | 北京五八信息技术有限公司 | 一种内存管理方法、装置、设备及计算机可读存储介质 |
CN109194986A (zh) * | 2018-08-24 | 2019-01-11 | 深圳市酷开网络科技有限公司 | 一种资源控制方法、智能电视及存储介质 |
CN109388459A (zh) * | 2018-09-26 | 2019-02-26 | 平安普惠企业管理有限公司 | 图片加载方法、装置、计算机设备及存储介质 |
CN109739853A (zh) * | 2018-12-21 | 2019-05-10 | 北京金山安全软件有限公司 | 数组处理方法、装置、电子设备及存储介质 |
CN110064198A (zh) * | 2019-04-11 | 2019-07-30 | 网易(杭州)网络有限公司 | 资源的处理方法及装置、存储介质和电子装置 |
CN110175306B (zh) * | 2019-05-23 | 2022-03-29 | 珠海天燕科技有限公司 | 一种广告信息的处理方法及装置 |
CN112506641B (zh) * | 2019-09-16 | 2022-11-11 | 武汉斗鱼网络科技有限公司 | 一种对象智能释放方法、装置和终端设备 |
CN113986438B (zh) * | 2021-10-30 | 2024-01-30 | 深圳市快易典教育科技有限公司 | 动画的加载方法、系统、装置及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544207A (zh) * | 2013-08-19 | 2014-01-29 | Tcl集团股份有限公司 | 一种图片加载显示的方法与系统 |
US20150153907A1 (en) * | 2012-06-12 | 2015-06-04 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for presenting images, mobile terminal and computer storage medium |
CN105893061A (zh) * | 2016-06-12 | 2016-08-24 | 杭州勒芒科技有限公司 | 应用程序开发方法及系统 |
CN106201358A (zh) * | 2016-07-15 | 2016-12-07 | 珠海市魅族科技有限公司 | 一种内存垃圾回收的方法及装置 |
CN106547624A (zh) * | 2016-11-04 | 2017-03-29 | 武汉斗鱼网络科技有限公司 | 基于Android的图片加载方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541605B (zh) * | 2011-12-30 | 2014-10-29 | Tcl集团股份有限公司 | 基于Android系统的图片加载方法和装置 |
CN104252367B (zh) * | 2013-06-27 | 2017-12-19 | 北京新媒传信科技有限公司 | 一种智能终端中异步加载图片的方法和系统 |
CN104657380A (zh) * | 2013-11-20 | 2015-05-27 | 青岛海信移动通信技术股份有限公司 | 一种图片加载方法和装置 |
CN103888602B (zh) * | 2014-03-03 | 2016-02-03 | 广州金山网络科技有限公司 | 移动终端中展示列表的控制方法和装置 |
CN104267996A (zh) * | 2014-09-29 | 2015-01-07 | 广州金山网络科技有限公司 | 一种图片资源处理方法、装置及终端 |
CN107357650B (zh) * | 2017-06-06 | 2020-12-15 | 武汉斗鱼网络科技有限公司 | 一种基于图片资源的内存自动释放方法及系统 |
-
2017
- 2017-06-06 CN CN201710419328.0A patent/CN107357650B/zh active Active
- 2017-12-29 WO PCT/CN2017/120148 patent/WO2018223677A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150153907A1 (en) * | 2012-06-12 | 2015-06-04 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for presenting images, mobile terminal and computer storage medium |
CN103544207A (zh) * | 2013-08-19 | 2014-01-29 | Tcl集团股份有限公司 | 一种图片加载显示的方法与系统 |
CN105893061A (zh) * | 2016-06-12 | 2016-08-24 | 杭州勒芒科技有限公司 | 应用程序开发方法及系统 |
CN106201358A (zh) * | 2016-07-15 | 2016-12-07 | 珠海市魅族科技有限公司 | 一种内存垃圾回收的方法及装置 |
CN106547624A (zh) * | 2016-11-04 | 2017-03-29 | 武汉斗鱼网络科技有限公司 | 基于Android的图片加载方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107357650A (zh) | 2017-11-17 |
WO2018223677A1 (zh) | 2018-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107357650B (zh) | 一种基于图片资源的内存自动释放方法及系统 | |
CN103324500B (zh) | 一种回收内存的方法及装置 | |
CN111258921B (zh) | 垃圾内存回收方法及装置、电子设备、存储介质 | |
CN108021590B (zh) | 一种目标对象属性确定方法、属性更新方法及装置 | |
CN109445927B (zh) | 一种存储集群的任务管理方法及装置 | |
KR20190058706A (ko) | 사이클 그래프에서 객체 수명을 관리하는 기법 | |
CN102902583A (zh) | 在挂起状态和执行状态下管理进程 | |
US10031814B2 (en) | Collection record location as log tail beginning | |
CN109213462B (zh) | Android横竖屏数据同步方法、装置、终端及可读介质 | |
CN108845875B (zh) | 一种常驻进程保活系统以及方法 | |
US11675622B2 (en) | Leader election with lifetime term | |
CN102999384A (zh) | 在挂起状态和执行状态下管理进程 | |
US9766929B2 (en) | Processing of data stream collection record sequence | |
CN112732674A (zh) | 云平台服务管理方法、装置、设备及可读存储介质 | |
CN108062244B (zh) | 爬虫任务的取消方法及装置 | |
CN106708547A (zh) | 一种服务插件管理方法和系统 | |
CN105243340A (zh) | 一种防止HBase中数据误删除的方法及系统 | |
CN107357664B (zh) | 一种分布式锁的实现方法和装置 | |
CN107741891B (zh) | 对象的析构方法、介质、装置和计算设备 | |
WO2017080362A1 (zh) | 数据管理方法及装置 | |
US11068375B2 (en) | System and method for providing machine learning based memory resiliency | |
CN105447384A (zh) | 一种反监控的方法、系统及移动终端 | |
CN111488117B (zh) | 用于管理元数据的方法、电子设备和计算机可读介质 | |
CN107085514B (zh) | 共享库升级方法及装置 | |
CN112988277B (zh) | 规则文件加载方法、装置、服务器及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240206 Address after: Room 801, 85 Kefeng Road, Huangpu District, Guangzhou City, Guangdong Province Patentee after: Yami Technology (Guangzhou) Co.,Ltd. Country or region after: China Address before: 430000 Wuhan Donghu Development Zone, Wuhan, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. Country or region before: China |
|
TR01 | Transfer of patent right |