Fresco的核心技术:
- Fresco的原理是:设计一个ImagePipeline的概念,它负责先后检查内存,磁盘文件,如果能够取出图片则取用之,反之再去从网络下载图片,并缓存。
- Fresco有三个线程,其中3个线程用于从网络下载图片,2两线程用于磁盘文件的读写,还有2个线程用于CPU的相关操作,比如图片解码,转换以及放在后台执行的一些费时操作。
- Fresco的三层缓存技术是其最核心 的技术,它比其他图片SDK吃内存小,也正是得利于这个全新的缓存设计。
- 第一层:Bitmap缓存
- 在Android5.0系统中,考虑到内存管理有了很大改进,所以Bitmap缓存位于Java堆(heap)中。
- 而在Android4.X和更低的系统中,Bitmap缓存位于ashmem中,而不是位于Java的堆中,这意味着图片的创建和回收不会引发过多的GC,从而让APP运行的更快。
- 当APP切换到后台时,Bitmap缓存会被清空。
- 第二层内存缓存
- 内存缓存中存储了图片的原始压缩格式。从内存缓存中取出的图片,在显示前必须先解码。
- 当APP切换到后台后,内存缓存也被清空。
- 第三层: 磁盘缓存
- 磁盘缓存也称为本地缓存。
- 磁盘缓存中存储的图片也是原始压缩格式,在使用时需先解码。
- 当APP切换到后台时,磁盘缓存不会丢失,即使关机也不会丢失。