美文网首页
Fresco内存机制学习

Fresco内存机制学习

作者: RangureZ | 来源:发表于2017-03-30 10:59 被阅读0次

仅为自己学习归纳

Image Pipeline


Fresco官方缓存图示
大致流程如下:
  1. 寻找内存缓存(Bitmap Cache)中是否有图片,有着返回,无则继续寻找。
  2. 后台线程开始工作。
  3. 寻找未解码缓存中是否有图片,如有,解码,变换,返回。然后将其缓存在内存缓存中。
  4. 寻找磁盘缓存中是否有图片,如有,解码,变换,返回。然后将其缓存到未解码缓存和内存缓存中。
  5. 从网络和本地加载图片,加载后解码,变换,返回。然后将其缓存到各个缓存中去。

上图中,disk cache实际包含了未解码的内存缓存在内,统一在一起只是为了逻辑稍微清楚一些。

关于disk cache的官方解释:

Yes, we know phones don’t have disks, but it’s too tedious to keep saying local storage cache

理解缓存图示
Image Pipeline默认有3个线程池:
  1. 3个线程用于网络下载。
  2. 2个线程用于磁盘操作:本地文件的读取,磁盘缓存的操作。
  3. 2个线程用于CPU相关的操作:解码,变换,以及后出来等后台操作。

三级缓存


1.Bitmap缓存

Bitmap缓存储存Bitmap对象,这些Bitmap对象可以立刻用来显示或者用于后处理

在5.0以下系统,BItmap缓存位于ashmem,这样Bitmap对象的创建和释放将不会一发GC(Gabage Collection),更少的GC会使APP更加流畅。

5.0及其以上系统,内存管理有了很大的改进,所以Bitmap缓存直接位于Jav啊的heap(堆内存)上

当应用在后台运行时,该内存会被清空。

ashmem:匿名共享内存

未解码图片的内存缓存

这个缓存存储的时原始压缩格式的图片。从该缓存取到的图片在使用之前,需要先进行解码。

如果有调整大小,旋转,或者WebP编码工作需要完成,这些工作会在解码之前进行。

磁盘缓存

和未解码的内存缓存相似,磁盘缓存储存的时未解码的原始压缩格式的图片,在使用之前同样需要解码等处理。

和其他的不一样,磁盘缓存在后台时,不会被清空,即使设备关闭,不过用户可以随时进入系统菜单进行清空缓存操作。

相关文章

  • Fresco 原理浅析

    目录 什么是fresco? 为什么要设计fresco? fresco有什么特性? fresco的架构原理 内存机制...

  • Fresco内存机制学习

    仅为自己学习归纳 Image Pipeline 大致流程如下: 寻找内存缓存(Bitmap Cache)中是否有图...

  • Fresco源码分析(一)

    Fresco学习中文地址:Fresco中文学习 Fresco Javadoc地址:Javadoc Fresco初始...

  • Fresco内存缓存

    Fresco 一共有三级缓存机制,其中前两级内存缓存都存储在java heap中,本地缓存存储在本地文件目录中。 ...

  • 匿名共享内存ashmem&MemoryFile

    4.4以下的机器中时,使用MemoryFile申请的内存不算入app的内存中的 Fresco:偷内存,只需要设置a...

  • Fresco的使用心得

    Fresco优点:1,使用简便,学习成本低2,十分强大,使用起来非常流畅,内存管理不用愁,不用担心OOM。3,自带...

  • Android 面试宝典

    Android跨进程通信:图文详解 Binder机制 原理 Picasso,Glide,Fresco对比分析 拆轮...

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • Fresco的缓存机制

    Fresco的图片获取及缓存由ImagePipeline模块实现,具体见下图: 三级缓存 1.Bitmap缓存 B...

  • 谈谈js中的内存机制——垃圾回收机制

    内存管理机制就是分配内存管理,每种编程语言都有它的内存管理机制,JavaScript的内存管理机制是:内存基元在变...

网友评论

      本文标题:Fresco内存机制学习

      本文链接:https://www.haomeiwen.com/subject/elxyottx.html