研究Fresco有段时间了,在内存使用上的确要比UIL的好挺多,但同时Fresco的使用也些许复杂,还有很多陷阱。

除了参看官方文档外,还需要注意一下问题:

一、配置

1、ImagePipelineConfig 要设置 setDownsampleEnabled(true),以打开对png等图片的自动缩放特性(缩放必须要设置ResizeOptions);

setResizeAndRotateEnabledForNetwork(),已对网络图也能进行resize处理,减少内存开销;

没有png等透明图片的显示要求,setBitmapsConfig设置为 RGB_565,减少内存开销;

2、如果有浏览本地图片的,并且一屏上显示多张(> 9),要将PoolFactory的flexByteArrayPoolParams的PoolParam的 maxSizeHardCap值设为 8MB以上。

默认是每个读取线程只有4MB的byte缓存池,但现在很多图片的文件大小都超过8MB,在同时加载多种图片时,容易出现缓存池大小不够,导致加载失败;

二、ImageRequest

1、加载文件路径不要直接直接使用 Uri.parse(),而要使用 Uri.fromFIle()。parse不会转义文件路径的unicode字符,导致加载失败;

2、ResizeOptions一定尽量要设置,并且是ImageView所显示的大小,这样可以尽可能的缩减加载的图像尺寸,节约内存;

3、加载到BitmapCache的图片都是带Resize的,如果两处加载同一个Uri,但ResizeOptions不同的话,那也是当做两张图片;

4、GIF图闪动:Fresco是不在内存中缓存GIF图的,每次显示都是重新解码,闪动可以设置ImageDecodeOption中的setDecodePreviewFrame(true),并不设置placeholder的图片;

三、缓存

1、直接获得内存缓存的Bitmap:

        DataSource<CloseableReference<CloseableImage>> dataSource =Fresco.getImagePipeline().fetchImageFromBitmapCache(request, null);CloseableReference<CloseableImage> imageReference = null;try {imageReference = dataSource.getResult();if (imageReference != null) {CloseableImage image = imageReference.get();// do something on this}} finally {dataSource.close();CloseableReference.closeSafely(imageReference);}

四、预加载

使用预加载时,要预加载到内存并解码的,要注意ResizeOptions,和照片旋转照成的长宽对调。

1、预缓存到本地文件,但不加载到内存,自动忽略ResizeOptions:

Fresco.getImagePipeline().prefetchToDiskCache(imageRequest, null)

2、预加载到内存并解码(不需要立即拿到结果的),受ResizeOptions影响:

Fresco.getImagePipeline().prefetchToBitmapCache(imageRequest, null)

3、加载一张图片,并缓存到内存,返回解码的结果,受ResizeOptions影响:

Fresco.getImagePipeline().fetchDecodedImage(imageRequest, null)

但要注意,返回的DataSource是不能直接拿到结果,需要subscribe DataSource

4、

Fresco 使用要点(不定期更新)相关推荐

  1. Oracle OCP 11g 常见单词(不定期更新)

    Oracle OCP 11g 常见单词(不定期更新) 数据库常见单词,不定期更新至考完ocp证(初步想法),现已收集807个单词: 最后一次更新时间为20180301. 1, ACCUMULATED  ...

  2. 不定期更新:我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看

    优质介绍视频: GPT4+前端[AI编程新纪元] [渐构]万字科普GPT4为何会颠覆现有工作流:为何你要关注微软Copilot.文心一言等大模型 此文章不定期更新(一周应该会更新一次) 最近一次更新: ...

  3. Android实用代码(不定期更新)

    Android实用代码七段(一) 一抹火焰 整理(不定期更新) 前言 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用. 声明: 欢迎转载,但请保留文章原始出处:)  博客园 ...

  4. 【☀️不定期更新了⛅】感谢知识输出的正反馈

    不定期更新 最近沉迷写博,不能自拔.感谢知识输出的正反馈,又对知识学习燃起了激情.然而还是艰难地决定减少博客的时间投入,本地的技术总结markdown还是会继续写,博客可能不会每周定时发,以后可能就是 ...

  5. [刷题记录] luogu网络流24题 及 网络流心得体会 及 经典模型不定期更新

    文章目录 信息汇总表格 飞行员配对方案问题 分配问题 运输问题 数字梯形问题 最小路径覆盖问题 魔术球问题 圆桌问题 试题库问题 深海机器人问题 航空路线问题 火星探险问题 太空飞行计划问题 方格取数 ...

  6. React性能优化记录(不定期更新)

    React性能优化记录(不定期更新) 1. 使用PureComponent代替Component 在新建组件的时候需要继承Component会用到以下代码 import React,{Componen ...

  7. 区块链矿池(pool)汇总(不定期更新,欢迎评论区留言)

    文章目录 辅助类网站 大型综合类矿池 Bitcoin/Litcoin/zcash Monero 不定期更新 辅助类网站 矿池算例排行:https://miningpoolstats.stream/bi ...

  8. Liunx上训练模型的常见情况(不定期更新)

    这篇博客用来记录一些Linux上后台训练机器学习模型的时候可能用到的简短的代码(不定期更新) 目录: 后台执行python训练脚本 查看训练时占用的资源 中途停止模型的训练 1.后台执行python训 ...

  9. net core 小坑杂记之配置文件读取(不定期更新)

    其实很早就想写了,原想等积累差不多了再写的,但是发现遇到一个当时记下效果会比较好,所以就不定期更新这个系列了,后面获取会整个整理一下. 此篇记载net core入门时踩的一些坑,网上教程太少了,也不规 ...

  10. JavaScript中的小陷阱(不定期更新。。)

    1. var scores = [1, 2, 3]; var total = 0; for (var score in scores) {total += score; }var mean = tot ...

最新文章

  1. 如何写出一手好的业务代码?
  2. DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别
  3. tomcat7 java_Tomcat7安装(jdk 1.7环境)
  4. java 命令行eclipse_在命令行中运行eclipse中创建的java项目
  5. 关于站库分离渗透思考总结
  6. 围成一圈的排列组合问题_分班必考知识点!小学奥数之排列组合问题
  7. P1852-跳跳棋【思维,差分,二分】
  8. Git Specification
  9. python读取多个文件夹_Python:从文件夹中读取多个json文件
  10. python 英语培训_英语学习与Python编程语言学习相辅相成(三十一)
  11. Kettle工具使用及总结
  12. python3 文本处理_解决python3 写入中文文本查看为乱
  13. 《Android游戏开发详解》——导读
  14. 4.35V锂电充电IC
  15. jasypt.jar 1.9.2下载,加密解密
  16. append html 是字符串,jquery .html()vs .append()
  17. android mic切换_android手机的Mic对声音的感知 .
  18. PHP(10):PHP读取Excel文件的记录-方法2
  19. 解决CustomValidator控件在Wizard控件验证失效果问题
  20. 【原创】基于WinForm的水晶报表开发

热门文章

  1. 洛谷 P1035 级数求和【二分||枚举】
  2. linux自动联想,在联想扩展坞和Linux上自动切换显示
  3. 实现蓝色理想的运行代码
  4. IMAC 2011 MID免光驱安装WIN10
  5. 数字电子技术课程设计报告——电子脉搏测试仪的设计
  6. 知乎周源微信_每周源代码16-风管磁带版
  7. Android图像处理(五)镜像、倒影、drawBitmapMesh实现旗帜飘扬效果
  8. 软件工程:敏捷过程与极限编程
  9. 正点原子的串口助手XCOM V2.0编码问题
  10. 用 C++ 和 Java 写算法,差别大吗?