[发明专利]一种基于图片资源的内存自动释放方法及系统有效
申请号: | 201710419328.0 | 申请日: | 2017-06-06 |
公开(公告)号: | CN107357650B | 公开(公告)日: | 2020-12-15 |
发明(设计)人: | 张磊;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹 |
地址: | 430000 湖北省武汉市武汉东湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 图片 资源 内存 自动 释放 方法 系统 | ||
本发明提供一种基于图片资源的内存自动释放方法及系统,所述的方法包括:利用可缓存线程池对图片资源进行异步加载;每加载一张图片时,构建与加载图片对应的map对象,将所有的map对象存放于list关系表中;按照预设时间间隔,遍历整个list关系表,根据map对象中图片加载后在内存中的存储地址获得位图bitmap对象;若bitmap对象满足回收条件,则触发内存中的回收机制对该bitmap对象进行回收。本发明选择具有缓存功能的线程池来异步加载图片,有效地解决了图片过大导致ANR的问题发生,以及能够定期清理内存中的bitmap对象,达到自动释放内存的目的,能够确保在系统资源紧张的时候,也不会引起系统内存异常的问题发生,提高了开发者的开发效率和降低程序出现异常的可能性。
技术领域
本发明涉及内存释放技术领域,更具体地,涉及一种基于图片资源的内存自动释放方法及系统。
背景技术
在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对象申明为弱引用关系;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710419328.0/2.html,转载请声明来源钻瓜专利网。