Flutter extended_image库设置内存缓存区大小与缓存图片数

news2024/11/15 18:06:35

 

 

ExtendedImage

`ExtendedImage` 是一个Flutter库,用于提供高级图片加载和显示功能。这个库使用了 `image` 包来进行图片的加载和缓存。如果你想修改缓存大小,你可以通过修改`ImageCache`的配置来实现。

1. 获取`ImageCache`实例:
   你可以通过`PaintingBinding.instance.imageCache`获取到全局的`ImageCache`实例。

2. 修改缓存配置:
   你可以通过修改`maximumSize`和`maximumSizeBytes`属性来调整缓存的数量和大小。

   - `maximumSize`: 缓存中最多可以存储的图片数量。
   - `maximumSizeBytes`: 缓存中图片总占用的最大字节数。

例如,如果你想将图片缓存的最大数量设置为100张,并且最大字节数设置为350MB,你可以这样做:

void main() {
  Global.init().then((_) => runApp(const MyApp()));
  //扩大imageCache的缓存
  PaintingBinding.instance.imageCache.maximumSize = 100;
  PaintingBinding.instance.imageCache.maximumSizeBytes = 350 << 20;  // 350MB

}

在`main`函数中进行设置确保在应用启动时就进行了配置。

注意:增加缓存大小会增加应用占用的内存,可能导致性能问题,特别是在内存有限的设备上。所以在调整这些设置时要谨慎,确保根据你的应用需求和目标设备的硬件规格来进行适当的配置。

使用上述方法设置全局的imageCache缓存逻辑,不设置的情况下,默认maximumSizeBytes 为100MB。默认100M在多张750宽高的图片列表中很快会回收掉划出屏幕的图片,用户超快速滑动时不够用。实测调整至350M左右开始效果明显改善。

maximumSizeBytes与磁盘缓存区大小的关系

`maximumSizeBytes` 设置的是 Flutter 的 `ImageCache` 对内存中的图片缓存所占用的最大字节大小。这个参数并不影响磁盘上的缓存大小。

在 Flutter 中,`ImageCache` 通常用于存储加载过的图片,以便快速再次访问。这些图片存储在应用的内存中,而不是磁盘上。当应用尝试加载新的图片时,`ImageCache` 会首先检查图片是否已经在缓存中。如果是,就可以直接从内存中加载图片,而无需再次从网络或磁盘加载,从而提高了性能。

设置 `maximumSizeBytes` 的目的是为了防止应用占用过多的内存来存储图片,特别是在加载大量或高分辨率图片的应用中。一旦缓存的大小超过了这个限制,`ImageCache` 就会根据一定的策略(如最近最少使用(LRU)策略)开始淘汰一些图片,释放内存。

如果你需要设置磁盘缓存的大小,你需要使用 Flutter 的网络库(如 `dio` 或 `http`)结合一个磁盘缓存库(如 `flutter_cache_manager`)来实现。这通常涉及到将下载的文件保存到设备的文件系统,并在需要时从那里加载它们。

在原生Android Glide库对于缓存的配置情况

Glide 默认使用的是 `InternalCacheDiskCacheFactory`,这个工厂会为 Glide 创建一个内部磁盘缓存,缓存的图片位于应用的内部存储空间中。默认情况下,Glide 会为其磁盘缓存分配 250 MB 的空间。

缓存大小的计算逻辑大致如下:

1. 内存缓存:Glide 会使用应用可用内存的一定比例来作为内存缓存。默认情况下,Glide 使用 `LruBitmapPool` 和 `LruResourceCache`,并且默认分配的大小基于 `MemorySizeCalculator` 类计算得出。`MemorySizeCalculator` 会考虑设备的可用内存和屏幕分辨率。

2. 磁盘缓存:对于磁盘缓存,默认情况下 Glide 使用 `InternalCacheDiskCacheFactory`,并分配 250 MB 的空间。这个值是在 `DiskLruCacheWrapper` 类中定义的。

如果你想要自定义这些缓存大小,你可以创建一个自定义的 `GlideModule`,并在 `applyOptions` 方法中使用 `MemorySizeCalculator.Builder` 来设置不同的内存缓存大小,以及使用 `InternalCacheDiskCacheFactory` 或 `ExternalPreferredCacheDiskCacheFactory` 来设置不同的磁盘缓存大小。

例如:

@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
    MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context)
        .setMemoryCacheScreens(2)
        .setBitmapPoolScreens(3)
        .build();
    builder.setMemorySizeCalculator(calculator);
    builder.setDiskCache(new InternalCacheDiskCacheFactory(context, 100 * 1024 * 1024));
}

在这个示例中,内存缓存大小被设置为屏幕大小的两倍,位图池大小被设置为屏幕大小的三倍,磁盘缓存大小被设置为 100 MB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansible简介

环境 控制节点&#xff1a;Ubuntu 22.04Ansible 2.10.8管理节点&#xff1a;CentOS 8 组成 Ansible环境主要由三部分组成&#xff1a; 控制节点&#xff08;Control node&#xff09;&#xff1a;安装Ansible的节点&#xff0c;在此节点上运行Ansible命令管理节点&#xff…

【剑指Offer】38.字符串的排列

题目 输入一个长度为 n 字符串&#xff0c;打印出该字符串中字符的所有排列&#xff0c;你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数据范围&#xff1a;n<10 要求&#xff1a;空间复…

基于springboot实现篮球竞赛预约平台管理系统项目【项目源码+论文说明】

基于springboot实现篮球竞赛预约平台管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;篮球竞赛预约平台也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&…

【图解数据结构】手把手教你如何实现顺序表(超详细)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板、汇编语言 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️线性表1.1 &#x1f514;线性表的定义1.2 &#x1f514;线性表的存储结构 二. ⛳️…

JavaScript进阶 第三天笔记

JavaScript 进阶 - 第3天笔记 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 了解面向对象编程的一般特征掌握基于构造函数原型对象的逻辑封装掌握基于原型对象实现的继承理解什…

对比Vue2和Vue3的自定义指令

一、自定义指令简介 自定义指令是Vue提供的能力,用于注册自定义的指令,从而实现一些自定义的DOM操作。 二、Vue2中自定义指令 在Vue2中,自定义指令通过全局方法Vue.directive()进行注册: // 注册全局指令v-focus Vue.directive(focus, {inserted: function(el) {el.focus()…

短视频矩阵剪辑分发+AI无人直播的如何开发技术搭建?

搭建步骤&#xff1a; 1. 首先需要根据自身产品确定视频类型及需要实现的视频效果 2. 根据预期视频效果选择视频上传模式&#xff0c;并将视频素材进行上传 3. 添加音频、字幕&#xff0c;标题等与素材进行组合。 4. 设置投放计划&#xff0c;包括&#xff1a;视频标题、视频…

如何解决找不到xinput1_3.dll无法继续执行此代码?5个解决方法分享

由于各种原因&#xff0c;电脑可能会出现一些问题&#xff0c;其中之一就是电脑提示找不到xinput1_3.dll。这个问题可能会导致一些应用程序无法正常运行&#xff0c;给用户带来困扰。那么&#xff0c;当遇到这个问题时&#xff0c;我们应该如何修复呢&#xff1f;小编将详细介绍…

C语言 每日一题 PTA 10.25 day4

10.25 求解马鞍点问题 若矩阵Anm中某个元素A[i][j]是矩阵第i行中值最小的元素&#xff0c;同时又是第j列中值最大的元素&#xff0c;则称元素A[i][j]是矩阵中的一个马鞍点。 设以二维数组存储矩阵&#xff0c;编写算法求矩阵A中的所有马鞍点&#xff0c;算法的时间复杂度要尽量…

【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《系统工程与信息系统基础》

本篇文章主要分享软考中系统工程与信息系统基础章节相关知识点。 系统工程与信息系统基础 [01] 霍尔三维结构以时间维、逻辑维、&#xff08;&#xff09;维组成的立体结构概括性地表示出系统工程的各阶段、各步骤以及所涉及的知识范围。其中时间维是系统的工作进程&#xff0…

OSATE 插件 Cheddar 的安装与简单使用

一、Cheddar简介 Cheddar是一个开源的实时系统任务调度模拟器/分析仪&#xff0c;可以使用Cheddar进行任务的可调度性分析以及相关的性能分析。对于Cheddar的详细信息可以参考其官网&#xff1a; Cheddar - open-source real-time scheduling simulator/analyzer (univ-brest…

JS加密/解密之手搓进阶版加密

前言 以前给大家介绍过一个简单的加密原理&#xff0c;是通过将字符串转换储层ascii码进行加密处理&#xff0c;这次介绍一个进阶版。解密难度直接上升了好几倍&#xff0c;加密代码放在下方各位自己尝试&#xff0c;解密代码就不贴了&#xff0c;感兴趣的可以到我的js加密官网…

Echarts的legend的特殊图例展示

问题描述 如图的红框中(上图是设计稿)&#xff0c;默认总发行和总到期都是矩形&#xff0c;即默认的情况下图例是25*14的&#xff0c;但是设计稿要求前两世正方形的。 问题复现&#xff1a; 默认的情况下&#xff0c;柱状图的图例是矩形(长方形),不是设计稿中的正方形。 演示…

什么是空运特殊货物_箱讯科技国际物流管理平台

空运货物具有时效快、安全性高等优势特点&#xff0c;但空运也有一定限制性。当然无论任何运输方式&#xff0c;运输对象都有这样的分类&#xff1a;普通货物、特殊货物。 那么在国际空运中&#xff0c;特殊货物是指什么呢&#xff1f; 01空运特殊货物 空运特殊货物是指那些无…

【网络协议】聊聊TCP的三挥四握

上一篇我们说了网络其实是不稳定的&#xff0c;TCP和UDP其实是两个不同的对立者&#xff0c;所以TCP为了保证数据在网络中传输的可靠性&#xff0c;从丢包、乱序、重传、拥塞等场景有自己的一套打法。 TCP格式 源端口和目标端口是不可缺少的&#xff0c;用以区分到达发送给拿…

生产环境元空间内存溢出(OOM)的问题排查

一、现象 2023.10.17下午收到业务反馈&#xff0c;说是接口调用超时&#xff0c;进件系统和核心系统调用外数系统接口时等待过久&#xff0c;引起系统异常。然后我们看了下接口调用的日志&#xff0c;确实接口的响应时间在五十秒左右。我们自己测试了下&#xff0c;发现也是这…

密码学-SHA-1算法

实验七 SHA-1 一、实验目的 熟悉SHA-1算法的运行过程&#xff0c;能够使用C语言编写实现SHA-1算法程序&#xff0c;增 加对摘要函数的理解。 二、实验要求 (1)理解SHA-1轮函数的定义和工作过程。 (2)利用VC语言实现SHA- 1算法。 (3)分析SHA- 1算法运行的性能。 三、实验…

统计文本词频的几种方法(Python)

目录 1. 单句的词频统计 2. 文章的词频统计 方法一&#xff1a;运用集合去重方法 方法二&#xff1a;运用字典统计 方法三&#xff1a;使用计数器 词频统计是自然语言处理的基本任务&#xff0c;针对一段句子、一篇文章或一组文章&#xff0c;统计文章中每个单词出现的次数…

HttpClient远程使用大全

一 HttpClient简介 1.1 概述 HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息。主要实现功能&#xff1a; 实现了所有 HTTP 的方法&#xff08;GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等&#xff09; 支持 HTTPS 协议 支持代理服务器&#xff08;Nginx…