终端内存处理方法、装置及终端的制作方法_3

文档序号:8380888阅读:来源:国知局
hash运算以及分离锁的机制。应用的性能很重要,为了提高数据的读写速度,方法之一就是采用缓存机制,作为核心基础设施,缓存必须具备以下几个方面的功能:1.快速定位数据;2.并发变更数据;3.数据的过期控制与异步写入;4.高并发的情况下缓存数据的一致性。ConcurrentHashMap类包含两个静态内部类HashEntry和Segment。HashEntry用来封装映射表的键/值对;Segment用来充当数据划分和锁的角色,每个Segment对象是整个散列映射表的若干个table。每个table是由若干个HashEntry对象链接起来的链表。一个ConcurrentHashMap实例中包含由若干个Segment对象组成的数组。
[0055]在Android中用到大量的默认图片,比如,应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到。如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能降低。因此,可以考虑将图片缓存起来,需要的时候直接从内存中读取。但是由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemoryExcept1n异常。这时,可以采用将图片压缩或者使用软引用的方法来避免这个问题的发生。下面将详细介绍这两种方法。
[0056]较大图片文件上传到服务器一般都需要压缩调整,以保证数据通信的效率是最主要的。首先图片的存在形式主要有三种,第一种是以文件形式即以二级制形式存在于硬盘上,第二种是以流的形式即以二进制形式存在于内存中,第三种则是以Bitmap形式。这三种的区别是文件形式和流形式对图片的体积大小并没有影响,也就是说,如果手机SD卡上的内存如果有100K,那么通过流的形式读到内存中,也一定是占10K的内存;当如果图片以Bitmap的形式存在时,其占用的内存会瞬间变大,假如500K文件形式的图片加载到内存,以Bitmap形式存在时,占用内存将近10M,当然这个增大的倍数并不是固定的。Bitmap是Android系统中的图像处理的最重要的类之一,用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
[0057]以下简单介绍几种常见的图片压缩方式:
[0058]方式一,将图片保存到本地时进行压缩,即将图片从Bitmap形式变为File形式时进行压缩。
[0059]其特点是file形式的图片确实被压缩了,但是当重新读取压缩后的file为Bitmap时,它占用的内存并没有改变。该方法是压缩图片的质量,它不会减少图片的像素。也就是该方法会让图片重新构造,但是有可能像素的色深(即位深)和每个像素的透明度会变化,JPEG onlysupports opaque (不透明),也就是说以JPEG格式压缩后,原来图片中透明的元素将消失,所以这种格式可能造成失真。既然它是改变了图片的显示质量,达到了对File形式图片的图片进行压缩,图片的像素没有改变的话,那重新读取经过压缩的file为Bitmap时,它占用的内存并不会少。
[0060]方式二,将图片从本地读到内存时,进行压缩,即图片从File形式变为Bitmap形式。
[0061]其特点是通过设置采样率,减少图片的像素,减少Bitmap的像素,从而减少了它所占用的内存。
[0062]以上两种方法总结一句话就是要想压缩内存中的Bitmap,就要减少它的像素;要想压缩为File,就要降低它的质量。
[0063]通过以上对于Java软引用类型的了解,可以知道使用软引用来构建缓存是比较合适的。虽然软引用能够延长数据对象的生命周期,但是对于移动设备来说,内存资源相对来说比较紧缺,仅使用软引用未必能达到最佳的缓存效果。通常会使用一些组合方式来进行数据缓存,最常用的是强引用、软引用加本地缓存的方式。
[0064]采用上述实施例及优选实施方式的双缓存处理,通过创建两个缓存区域:强引用缓存区域和软引用缓存区域。在强引用缓存区中保存有限的图片对象,根据LRU策略把一些最不常用的图片对象移到软引用缓存区,当缓存区域中都没有图片对象时从网络加载图片。完成后把图片数据保存到SDCard中,并根据LRU策略进行管理SDCard中保存的图片文件。
[0065]综上所述,采用双缓存,可以实现内存敏感的高速缓存,防止内存泄露,增强程序的健壮性。不仅降低了对内存的依赖,实现内存的高速缓存,而且能够有效防止内存泄露,低性能的系统中也能畅快运行(用户体验),数据加载速度变快,大大提高了应用的稳定性(用户体验)。
[0066]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0067]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种终端内存处理方法,其特征在于,包括: 将所述终端内存划分为多个缓存区域; 对所述多个缓存区域进行分级; 依据分级后的所述缓存区域对所述终端内存中的缓存对象进行分级缓存处理。
2.根据权利要求1所述的方法,其特征在于,将所述终端内存划分为所述多个缓存区域包括: 将所述终端内存划分为一级缓存区域和二级缓存区域,其中,所述一级缓存区域内的缓存对象禁止被垃圾回收器回收,所述二级缓存区域内的缓存对象在满足预定存储容量时被所述垃圾回收器回收。
3.根据权利要求2所述的方法,其特征在于,依据分级后的所述缓存区域对所述终端内存中的缓存对象进行分级缓存处理包括: 判断所述一级缓存区域内缓存的对象是否超过预定容量; 在判断结果为是的情况下,将所述一级缓存区域内缓存的缓存对象转换为在所述二级缓存区域进行缓存。
4.根据权利要求3所述的方法,其特征在于,将所述一级缓存区域内缓存的对象转换为在所述二级缓存区域进行缓存包括: 对所述一级缓存区域内的缓存对象依据访问量的多少进行排序; 优先将所述一级缓存区域内访问量少的缓存对象转换为在所述二级缓存区域内进行缓存。
5.根据权利要求2至4中任一项所述的方法,其特征在于,所述一级缓存区域采用链状哈希映射LinkHashMap容器对所述一级缓存区域内的缓存对象进行缓存。
6.根据权利要求2至4中任一项所述的方法,其特征在于,所述二级缓存区域采用并行哈希映射ConcurrentHashMap容器对所述二级缓存区域内的缓存对象进行缓存。
7.—种终端内存处理装置,其特征在于,包括: 划分模块,用于将所述终端内存划分为多个缓存区域; 分级模块,用于对所述多个缓存区域进行分级; 缓存模块,用于依据分级后的所述缓存区域对所述终端内存中的缓存对象进行分级缓存处理。
8.根据权利要求7所述的装置,其特征在于,所述划分模块包括: 划分单元,用于将所述终端内存划分为一级缓存区域和二级缓存区域,其中,所述一级缓存区域内的缓存对象禁止被垃圾回收器回收,所述二级缓存区域内的缓存对象在满足预定存储容量时被所述垃圾回收器回收。
9.根据权利要求8所述的装置,其特征在于,所述缓存模块包括: 判断单元,用于判断所述一级缓存区域内缓存的对象是否超过预定容量; 转换单元,用于在所述判断单元的判断结果为是的情况下,将所述一级缓存区域内缓存的缓存对象转换为在所述二级缓存区域进行缓存。
10.根据权利要求9所述的装置,其特征在于,所述转换单元包括: 排序子单元,用于对所述一级缓存区域内的缓存对象依据访问量的多少进行排序; 转换子单元,用于优先将所述一级缓存区域内访问量少的缓存对象转换为在所述二级缓存区域内进行缓存。
11.一种终端,其特征在于,包括权利要求7至10中任一项所述的装置。
【专利摘要】本发明提供了一种终端内存处理方法、装置及终端,该方法包括:将终端内存划分为多个缓存区域;对该多个缓存区域进行分级;依据分级后的缓存区域对终端内存中的缓存对象进行分级缓存处理,通过本发明,解决了相关技术中存在终端内存相对紧张同时又对终端应用的用户体验要求很高的矛盾的问题,进而达到了实现对内存的高速缓存,有效解决内存紧张与应用体验相矛盾,提高用户体验的效果。
【IPC分类】G06F12-08
【公开号】CN104699626
【申请号】CN201310669799
【发明人】王正和, 陈华, 陈小强, 丁岩
【申请人】中兴通讯股份有限公司
【公开日】2015年6月10日
【申请日】2013年12月10日
【公告号】WO2015085732A1
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1