如何在 Glide 中缓存图像

Kat*_*mas 12 android caching image

当我使用 glide 时,某些图像无法加载。我如何将它存储在缓存中或任何地方,直到我使用该应用程序加载所有图像。我的问题的示例图片:

截屏

我的代码:

.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);
Run Code Online (Sandbox Code Playgroud)

.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" />
Run Code Online (Sandbox Code Playgroud)

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

编辑: 有了这些 (.diskCacheStrategy(DiskCacheStrategy.RESULT ; diskCacheStrategy(DiskCacheStrategy.Source) 我有同样的问题。我从 LogCat: Throwing OutOfMemoryError "Failed to allocate a 1519012 byte allocation with 230112 free bytes and 224KB until OOM" 和我不知道如何,何时应该缓存它。

Sau*_*try 15

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

在此处输入图片说明

在此处输入图片说明

  • 版本 4.x 是类似于 4.5.0 的库版本 (3认同)

小智 5

这是一个常见的场景,您希望从缓存加载图像并在存在新图像时才下载新数据,您必须有一种方法来知道图像是否已更新,例如一个名为 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);
Run Code Online (Sandbox Code Playgroud)


Abh*_*mar 1

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

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

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