【问题标题】:How to cache images in Glide如何在 Glide 中缓存图像
【发布时间】:2018-06-17 12:39:50
【问题描述】:

当我使用滑行时,有些图像无法加载。我怎样才能将它存储在缓存中或任何地方,当我使用该应用程序时,我的所有图像都会加载。 我的问题的示例图片:

我的代码:

.java

             home_ib7_monster_truck = 
            (ImageButton)findViewById(R.id.home_ib7_monster_truck);
             Glide.with(Home.this)
            .load(R.drawable.moviep_monster_truck)
            .centerCrop()
            .fitCenter()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(home_ib7_monster_truck);

.xml

<ImageButton
            android:id="@+id/home_ib7_monster_truck"
            android:layout_width="98dp"
            android:layout_height="155dp"
            android:layout_alignStart="@+id/home_ib4_keplers_dream"
            android:layout_below="@+id/home_ib4_keplers_dream"
            android:layout_marginTop="14dp"
            android:background="@android:color/transparent"
            android:scaleType="fitCenter" />

我使用 glide 是因为我看到它很容易使用,而且我可以从 drawables 中加载图像。 主要问题是,它是随机执行的,所以我的意思是一旦我的所有图像都没有出现,另一次所有图像都可以看到,我不知道为什么。 我使用 980x1550 大小的图像,因为我不希望我的图像充满像素,当我在 .xml 中使用另一种方法(如 src)时出现内存错误。 所以有人知道任何解决方案,我该如何缓存图像?

编辑: 有了这些 (.diskCacheStrategy(DiskCacheStrategy.RESULT ; diskCacheStrategy(DiskCacheStrategy.Source) 我有同样的问题。 我从 LogCat 得到这个:抛出 OutOfMemoryError “无法分配 1519012 字节分配,230112 空闲字节和 224KB 直到 OOM” 我不知道应该如何缓存它。

【问题讨论】:

  • 发布 Glide 日志,以便我们知道图像加载失败的原因

标签: android image caching


【解决方案1】:

请按照官方文档阅读以下说明:https://futurestud.io/tutorials/glide-caching-basics

【讨论】:

  • 4.x之后的Glide是什么意思?
  • 版本 4.x 是库的版本,如 4.5.0
  • 如果我只想让 Glide 在需要时使用缓存,我使用哪一个有关系吗?
【解决方案2】:

这是一个常见的场景,您希望从缓存中加载图像并下载新数据如果存在新图像,您必须有办法知道图像是否已更新,因为例如一个名为 imageTimeStamp 的变量,其中包含上次更新图像的时间。

            Glide.with(context).load(url).apply(new RequestOptions()
                .placeholder(R.drawable.defultIcon)
                .signature(new ObjectKey(image.getPPTimeStamp()))) // here you add some value , if the next time you add the same value then it will load from cache otherwise if you put new value you will download , then save in cache
                .into(icon);

【讨论】:

    【解决方案3】:

    Glide 默认会将所有图片资源放入内存缓存中。因此,不需要专门调用.skipMemoryCache( false )

    提示:请注意,如果您在没有.skipMemoryCache( true ) 的情况下向同一个 URL 发出初始请求,然后使用该方法,则资源将被缓存在内存中。当您想要调整缓存行为时,请确保您在对同一资源的所有调用中保持一致!

    参考:https://futurestud.io/tutorials/glide-caching-basics

    【讨论】:

    • 有了这些 (.diskCacheStrategy(DiskCacheStrategy.RESULT ; diskCacheStrategy(DiskCacheStrategy.Source) 我有同样的问题。我从 LogCat 得到这个:Throwing OutOfMemoryError "Failed to allocate a 1519012 byte allocation with 230112 free bytes和 224KB 直到 OOM”,我不知道应该如何缓存它。
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多