美文网首页
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内存机制学习

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