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

这篇具有很好参考价值的文章主要介绍了Flutter extended_image库设置内存缓存区大小与缓存图片数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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左右开始效果明显改善。

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

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。文章来源地址https://www.toymoban.com/news/detail-719240.html

到了这里,关于Flutter extended_image库设置内存缓存区大小与缓存图片数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch 内存大小设置

    找到elasticsearch的安装目录,然后找到config文件夹,里面都是相关的配置文件。 官方不建议直接修改jvm.options,而是复制jvm.options到jvm.options.d目录下,再修改。 其中,jvm.options可以修改es运行时候的内存分配。打开jvm.options文件,我们可以发现默认设置的内存是4g。 将内存修改

    2024年02月16日
    浏览(45)
  • Linux下设置Tomcat服务器的内存大小

    Tomcat 是一个开源的 Java Servlet 容器,用于实现 Java Servlet 和 JavaServer Pages (JSP)。在 Linux 系统下,你可以通过调整 Tomcat 的内存大小来优化服务器的性能。本文将详细介绍如何在 Linux 系统下设置 Tomcat 服务器的内存大小。 打开 Tomcat 的配置文件 Tomcat 的配置文件通常位于 Tomcat 安

    2024年02月05日
    浏览(51)
  • 3、Ubuntu22.04、查看和设置虚拟内存的大小

            在 Ubuntu 22.04 或其他类似的 Linux 发行版中,虚拟内存通常是通过交换分区(Swap)来实现的。 一、查看虚拟内存大小: 这会显示物理内存(RAM)和虚拟内存(Swap)的使用情况。关注 \\\"Swap\\\" 行,其中包含有关虚拟内存的信息。 (备注:上面我 \\\"free-h显示的结果里\\\" 本

    2024年02月19日
    浏览(65)
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明

    1.abstract(抽象类) dart 抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。 抽象类通过abstract 来定义。 抽象类不可以被实例化,只有继承他的子类可以。 子类继承抽象类必须实现里面的抽象方法。 抽象类作为接口,必须实现抽象类里面的所有

    2024年01月17日
    浏览(33)
  • 【Flutter】dart class、 mixin和extends、implements、with那些事

    本文档基于dart 3.2.3, 于dart 3.0 有效。本篇起源于大池子面试问题:extends implements、with 有啥区别。关于此问题,我想从class 和 mixin 开始, abstract base final interface sealed mixin 2.1 抽象类的定义 根据我们对 OOP 的理解,抽象类中的方法都是 抽象方法 ,那么 dart 抽象类有如下特点 抽象

    2024年01月20日
    浏览(50)
  • 思科模拟器:acl网络访问控制 命名设置(extended)

    环境: 1. 全局互通 2.阻止1.1访问2.1ftp服务 3.阻止3.1访问2.2www 网站访问 进入r2全局模式 ip access-list extended asd ip access-list extended + 名字( 这个名字随便取,相当于一个变量,往里写入变量值,等会把这个变量使用在接口上 ) deny tcp host 192.168.1.1 host 192.168.2.1 eq ftp 拒绝1.1访问2

    2024年02月11日
    浏览(36)
  • Flutter Image库详细介绍与使用指南

    1. 介绍 在Flutter中,图片是应用程序中不可或缺的一部分,而 image 库是一个强大而灵活的图片加载和处理库。通过使用 image^ 4.1.4 ,您可以轻松地实现图片的加载、缓存、调整大小和裁剪等功能,同时还支持各种图片格式。 2. 安装 在 pubspec.yaml 文件中添加以下依赖: 然后运行

    2024年01月25日
    浏览(36)
  • 【Flutter】Flutter 图片缓存入门:cached_network_image 解决图片加载的问题

    在这里,我们将一起探讨 Flutter 中的一个非常实用的库——cached_network_image。如果你是一位 Flutter 开发者ÿ

    2024年02月14日
    浏览(43)
  • 【flutter】flutter如何让app内字体大小不随着系统改变而改变

    如果我们不特意设置,flutter开发的app他的字体大小是会跟着系统设置的字体大小而改变,这样就会导致页面出现布局错乱问题,那么如何解决这个问题呢?我也搜索了相关资料,有两个常用也是网络上搜集到比较多的方法,还有一个是我自己使用的比较简单粗暴但是我认为方

    2024年02月15日
    浏览(52)
  • Flutter:网络图像缓存插件——cached_network_image

    为什么要使用这个插件,有什么用呢?毕竟官方提供了 Image.network 来进行网络图片加载 Image.network 和 CachedNetworkImage 都可以用于在Flutter中加载网络图片,但它们之间有一些区别。 Image.network 是Flutter核心库提供的一个构造函数,用于直接加载网络图片。它可以从给定的URL加载图

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包