Fresco 使用要点(不定期更新)
研究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 使用要点(不定期更新)相关推荐
- Oracle OCP 11g 常见单词(不定期更新)
Oracle OCP 11g 常见单词(不定期更新) 数据库常见单词,不定期更新至考完ocp证(初步想法),现已收集807个单词: 最后一次更新时间为20180301. 1, ACCUMULATED ...
- 不定期更新:我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看
优质介绍视频: GPT4+前端[AI编程新纪元] [渐构]万字科普GPT4为何会颠覆现有工作流:为何你要关注微软Copilot.文心一言等大模型 此文章不定期更新(一周应该会更新一次) 最近一次更新: ...
- Android实用代码(不定期更新)
Android实用代码七段(一) 一抹火焰 整理(不定期更新) 前言 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用. 声明: 欢迎转载,但请保留文章原始出处:) 博客园 ...
- 【☀️不定期更新了⛅】感谢知识输出的正反馈
不定期更新 最近沉迷写博,不能自拔.感谢知识输出的正反馈,又对知识学习燃起了激情.然而还是艰难地决定减少博客的时间投入,本地的技术总结markdown还是会继续写,博客可能不会每周定时发,以后可能就是 ...
- [刷题记录] luogu网络流24题 及 网络流心得体会 及 经典模型不定期更新
文章目录 信息汇总表格 飞行员配对方案问题 分配问题 运输问题 数字梯形问题 最小路径覆盖问题 魔术球问题 圆桌问题 试题库问题 深海机器人问题 航空路线问题 火星探险问题 太空飞行计划问题 方格取数 ...
- React性能优化记录(不定期更新)
React性能优化记录(不定期更新) 1. 使用PureComponent代替Component 在新建组件的时候需要继承Component会用到以下代码 import React,{Componen ...
- 区块链矿池(pool)汇总(不定期更新,欢迎评论区留言)
文章目录 辅助类网站 大型综合类矿池 Bitcoin/Litcoin/zcash Monero 不定期更新 辅助类网站 矿池算例排行:https://miningpoolstats.stream/bi ...
- Liunx上训练模型的常见情况(不定期更新)
这篇博客用来记录一些Linux上后台训练机器学习模型的时候可能用到的简短的代码(不定期更新) 目录: 后台执行python训练脚本 查看训练时占用的资源 中途停止模型的训练 1.后台执行python训 ...
- net core 小坑杂记之配置文件读取(不定期更新)
其实很早就想写了,原想等积累差不多了再写的,但是发现遇到一个当时记下效果会比较好,所以就不定期更新这个系列了,后面获取会整个整理一下. 此篇记载net core入门时踩的一些坑,网上教程太少了,也不规 ...
- JavaScript中的小陷阱(不定期更新。。)
1. var scores = [1, 2, 3]; var total = 0; for (var score in scores) {total += score; }var mean = tot ...
最新文章
- 如何写出一手好的业务代码?
- DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别
- tomcat7 java_Tomcat7安装(jdk 1.7环境)
- java 命令行eclipse_在命令行中运行eclipse中创建的java项目
- 关于站库分离渗透思考总结
- 围成一圈的排列组合问题_分班必考知识点!小学奥数之排列组合问题
- P1852-跳跳棋【思维,差分,二分】
- Git Specification
- python读取多个文件夹_Python:从文件夹中读取多个json文件
- python 英语培训_英语学习与Python编程语言学习相辅相成(三十一)
- Kettle工具使用及总结
- python3 文本处理_解决python3 写入中文文本查看为乱
- 《Android游戏开发详解》——导读
- 4.35V锂电充电IC
- jasypt.jar 1.9.2下载,加密解密
- append html 是字符串,jquery .html()vs .append()
- android mic切换_android手机的Mic对声音的感知 .
- PHP(10):PHP读取Excel文件的记录-方法2
- 解决CustomValidator控件在Wizard控件验证失效果问题
- 【原创】基于WinForm的水晶报表开发