广告
返回顶部
首页 > 资讯 > 移动开发 >Android内存优化之内存缓存
  • 894
分享到

Android内存优化之内存缓存

优化缓存Android 2022-06-06 12:06:31 894人浏览 泡泡鱼
摘要

  什么是缓存?   缓存技术原理是把用户访问的所有对象看作一个全集,经过算法标记哪些是用户经常访问的对象,把这些对象放到一个集合里,这个集合是全集一个子集,下一次

  什么是缓存?   缓存技术原理是把用户访问的所有对象看作一个全集,经过算法标记哪些是用户经常访问的对象,把这些对象放到一个集合里,这个集合是全集一个子集,下一次用户再访问的时候会先从这个子集集合中查找用户要访问的对象如果找到直接返回这个对象,如果没有找到则再去全集中查找。当然了我这里说的只是原理性的东西,缓存是有很多算法的,并且有的不止一级缓存,这里不过多讲了。   为什么要用到缓存?   有缓存的话可以不必每次从源地址读取文件,既节省了时间也节省了流量。尤其是手机设备,频繁的访问网络资源会消耗很多用户的流量和电量,这是用户不能忍受的,所以无论从哪个方面考虑应用程序都必须加上缓存。   Android中的图片缓存有哪些?各有什么特点?   Android设备的图片缓存分两种,一种是内存缓存,图片缓存在设备的内存中,一种是外部缓存,图片缓存在磁盘上,磁盘可以是内部的存储空间也可以是外部的sd卡。这两种缓存各有各的优点,内存缓存优点是快,缺点是因为也是读取到内存中所以也会消耗内存,所以不能太大,用的时候要考虑分配的空间,还有一个缺点是应用重启后会消失。外部缓存的优点是可以长久保存大量的数据(相比较内存缓存而言),缺点是慢。   内存缓存:   在Android中官网推荐使用LruCache作为内存缓存,LruCache实际上是一个LinkedHashMap( 补充知识:LinkedHashMap是一个双向循环列表,不支持线程安全,LruCache对它进行了封装添加了线程安全操作),里面保存了一定数量的对象强引用,每次添加的新对象都是在链表的头,当分配的空间用完的时候会把末尾的对象移除,移除的对象可以被GC回收了。这里需要注意一下LruCache的容量,这个容量既不能太大,会造成OOM,又不能太小,起不到缓存的作用。Google官网给出一下意见作为参考:   分配LruCache大小的时候考虑你的应用剩余内存有多大;   一次屏幕显示多少张图片,有多少张图片是缓存起来准备显示的;   考虑你的手机分辨率和尺寸, 缓存相同的图片个数,dpi越大的手机需要的内存会越大;   图片分辨率和像素质量也决定了占用内存的大小;   图片访问的频繁程度是多少,是不是有一些图片是经常访问的?如果存在你可以考虑用多个·LruCache来做缓存,按照访问的频率度分配到不同的LruCache中;   如何平衡一下图片质量和数量,有些时候可以考虑缓存低分辨率的图片,用到的时候再在后台请求更高质量的图片;   总之你分配的LruCache大小既不能太大,又不能太小,具体到应用中还要你综合考虑。   下面的代码是使用LruCache的例子:   private LruCache<String, Bitmap> mMemoryCache;//声明缓存空间   final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);//获取应用在系统中的大内存分配   //分配1/8的应用内存作为缓存空间   final int cacheSize = maxMemory / 8;   mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {   @Override   protected int sizeOf(String key, Bitmap bitmap) {   //重写sizeOf方法,返回图片的占用字节数而不是图片的个数,每次添加图片是会被调用   return bitmap.getByteCount() / 1024;   }   };   注意:有同学可能会问下面的代码:   intcacheSize=4*1024*1024;// 4MiB   LruCachebitmapCache=newLruCache(cacheSize){   protectedintsizeOf(Stringkey,Bitmapvalue){   returnvalue.getByteCount();   }   }   这两个sizeOf的计算是不一样的,这里说明一下,这个方法重写的目的是返回图片占用的缓存空间而不是图片的数目,并且这个数值的单位要和cacheSize一样。   总结:   综合上面的讲解,在使用内存缓存LruCache时你需要知道如下知识:   LruCache封装了LinkedHashMap,提供了LRU(Least Recently Used 近少使用算法)缓存的功能;   LruCache通过trimToSize方法自动删除近少访问的键值对;   LruCache不允许空键值, LinkedHashMap允许;   LruCache线程安全, LinkedHashMap线程不安全;   继承LruCache时,必须要复写sizeOf方法,用于计算每个条目的大小。在put和get的时候会调用safeSizeOf(K key, V value),safeSizeOf(K key, V value)会调用 sizeOf (K key, V value),这个方法默认返回1。


--结束END--

本文标题: Android内存优化之内存缓存

本文链接: https://www.lsjlt.com/news/28586.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android内存优化之内存缓存
      什么是缓存?   缓存技术原理是把用户访问的所有对象看作一个全集,经过算法标记哪些是用户经常访问的对象,把这些对象放到一个集合里,这个集合是全集一个子集,下一次...
    99+
    2022-06-06
    优化 缓存 Android
  • android内存优化之图片优化
    对图片本身进行操作。尽量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些...
    99+
    2022-06-06
    图片 优化 Android
  • 浅谈Android性能优化之内存优化
    目录1、Android内存管理机制1.1 Java内存分配模型1.2 Dalvik和ART介绍1.3 为什么要进行内存优化2、Java内存回收算法2.1判断Java中对象是否存活的算...
    99+
    2022-11-12
  • Android性能优化之内存泄漏
      前言   对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助...
    99+
    2022-06-06
    内存泄漏 优化 Android
  • 总结Android App内存优化之图片优化
    前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮、背景、动...
    99+
    2022-06-06
    图片 优化 app Android
  • Android内存优化杂谈
    Android内存优化是我们性能优化工作中比较重要的一环,这里其实主要包括两方面的工作: 1、优化RAM,即降低运行时内存。这里的目的是防止程序发生OOM异常,以及降低程序由于...
    99+
    2022-06-06
    杂谈 优化 Android
  • 详解Android性能优化之内存泄漏
    综述 内存泄漏(memory leak)是指由于疏忽或错误造成程序未能释放已经不再使用的内存。那么在Android中,当一个对象持有Activity的引用,如果该对象不能被系统...
    99+
    2022-06-06
    内存泄漏 优化 Android
  • Android性能优化之JVMTI与内存分配
    目录前言JVMTIJVMTI 简介:native层开启jvmti前置准备复写Agent开启jvmtiCapabilities设置jvmtiEventCallbacks开启监听java...
    99+
    2022-11-13
  • Android性能优化之内存优化的示例分析
    这篇文章主要介绍Android性能优化之内存优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、Android内存管理机制1.1 Java内存分配模型先上一张JVM将内存划分区域的图程序计数器:存储当前线...
    99+
    2023-06-15
  • Android性能优化之ViewPagers + Fragment缓存优化
    目录前言1 ViewPager懒加载优化1.1 ViewPager的缓存机制1.2 ViewPager懒加载方案2 ViewPager2与ViewPager的区别前言 大家看标题,可...
    99+
    2022-11-13
  • 详解Android的内存优化--LruCache
    概念: LruCache 什么是LruCache? LruCache实现原理是什么? 这两个问题其实可以作为一个问题来回答,知道了什么是 LruCache,就只然而然的知道 L...
    99+
    2022-06-06
    lrucache 内存优化 优化 Android
  • 详解Android内存优化策略
    目录前言一、内存优化策略二、具体优化的点1.避免内存泄漏2.Bitmap等大对象的优化策略(1) 优化Bitmap分辨率 (2) 优化单个像素点内存 (3) Bitmap的缓存策略 ...
    99+
    2022-11-12
  • Android图片三级缓存策略(网络、本地、内存缓存)
    一、简介 现在的Android应用程序中,不可避免的都会使用到图片,如果每次加载图片的时候都要从网络重新拉取,这样不但很耗费用户的流量,而且图片加载的也会很慢,用户体验很不好。...
    99+
    2022-06-06
    三级缓存 缓存 Android
  • 解析Android开发优化之:对Bitmap的内存优化详解
    1) 要及时回收Bitmap的内存 Bitmap类有一个方法recycle(),从方法名可以看出意思是回收。这里就有疑问了,Android系统有自己的垃圾回收机制,可以不定期的...
    99+
    2022-06-06
    内存优化 bitmap android开发 优化 Android
  • Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )
    1.jvm 堆内存(dalvik 堆内存) 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 创建模拟器时,会设置jvm he...
    99+
    2023-09-14
    java android jvm
  • 内存缓存软件 memcached
    第1章 memcached内存缓存软件 (内存比磁盘快)分为服务端和客户端 服务端 memcached客户端memcache 诞生的原因。2003年诞生了memcachedweb1.0 2005以...
    99+
    2022-10-18
  • golang实现内存缓存
    随着互联网技术的不断发展,需求和数据量也在不断地增加。对于一些数据量较大的应用来说,如何高效地读写数据成为了一个重要的问题。内存缓存技术应运而生,成为提高数据读写效率和应用性能的关键技术。本文将讨论如何使用golang实现内存缓存。什么是内...
    99+
    2023-05-14
  • 浅谈Android应用的内存优化及Handler的内存泄漏问题
    一、Android内存基础 物理内存与进程内存 物理内存即移动设备上的RAM,当启动一个Android程序时,会启动一个Dalvik VM进程,系统会给它分配固定的内存空间(1...
    99+
    2022-06-06
    内存优化 内存泄漏 优化 handler Android
  • Ubuntu释放缓存/内存和显存
    前言 深度学习训练模型时,总是出现显存和内存爆满的现象,导致训练中断,这里总结几个好用的方法: 代码添加指令手动释放内存/缓存自动定时释放内存/缓存代码释放显存(torch) 1. 代码添加指令 代码中存在一些临时变量或者缓存,使用del...
    99+
    2023-08-20
    ubuntu 缓存 linux 服务器
  • 详解Android中Bitmap及其内存优化
    小编这次要给大家分享的是详解Android中Bitmap及其内存优化,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。Android Bitmap详解及Bitmap的内存优化一、Bitmap:Bitmap...
    99+
    2023-05-31
    android bitmap roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作