问题标签 [android-lru-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
209 浏览

android - 如何在 android 中使用 lru 缓存创建自定义谷歌标记?

嗨,任何人都可以提供示例代码来使用 lru 缓存创建自定义谷歌标记。我不知道如何重用位图并在超出内存时清除缓存。

0 投票
0 回答
153 浏览

java - LRUCache 返回大小 0,直到所有图像都被缓存

我正在使用 LRUCache 缓存从服务器检索的图像。我从 RecyclerView 请求它们,但直到所有图像都被缓存,LRUCache 实例返回大小 0。

这是代码

我应该怎么做才能解决这个问题?
谢谢大家

0 投票
3 回答
1842 浏览

android - Picasso - 将缓存大小限制为 5 MB

我在我的应用程序中使用 Picasso 来下载和缓存图像。
它的工作很好,但有一个问题:应用程序有很多图像,并且在短时间内应用程序缓存增加超过 10 MB!

经过长时间的搜索,我找到了在毕加索中限制缓存的解决方案,但不起作用:

我在我的应用程序类的 onCreate 中使用此方法。
我的工作出了什么问题?还是有其他方法可以实现这一目标?
{我希望清楚地解释我的问题:/}

0 投票
2 回答
1897 浏览

java - NullPointerException: key == null || 值 == 空

我的应用程序中有一个适配器,它可以扩展帖子并将它们显示在ListView. 每个帖子都有一个图像,因此它用于LruCache存储图像。

该应用程序运行良好,但它崩溃了两三次,我无法意识到问题出在哪里。只有上一次,我可以从 LogCat 获得这个日志:

E/AndroidRuntime(2407): 引起: java.lang.NullPointerException: key == null || 值 == 空

崩溃仅在最近安装应用程序时发生(当我从设备中删除应用程序并重新安装时)!当我第一次打开应用程序并开始快速上下滚动时,有时它会崩溃。(它不会一直发生,它是完全随机的!)

在那之后,它不会再崩溃了......:/

我认为这与 LruCache 和空缓存有关。我看到了这个问题,但这不是我的问题!我确实在我的代码中检查了空缓存:

有什么建议吗?

PS:我知道我的问题没有足够的细节,但这就是我所拥有的全部信息!

0 投票
1 回答
235 浏览

android - Android sdcard最小文件大小总是4kb吗?

我正在使用 DiskLruCache 来存储大约 70k 个文件。这些文件非常小,其中一半甚至不到 13 个字节。但是,每个文件大小在磁盘中至少为 4kb,因为我认为这是最小块大小。因此,当我为 256MB 的缓存设置 maxSize 时,缓存实际上会增长到磁盘中的 450MB 以上。我修改了 DiskLruCache 中的代码,因此它考虑到文件存储在 4kb 块中。但是,我的问题是,我可以相信每个 Android 设备总是将其 sdcard 划分为 4kb 块吗?会不会是另一个设备的块大小更大或更小?

0 投票
1 回答
492 浏览

android - LruCache 返回 null

当我尝试使用它们的键检索它们时,我有以下代码来缓存位图。他们总是返回 null 。请帮我 。谢谢你

获取和设置缓存的函数

- - - - - -更新 - - - - - - - - - - - - - - - - - - - ---好吧,经过一些调试发现它正在插入值,但是在我退出应用程序后我无法访问它。当我尝试重新启动应用程序时,缓存会丢失。请有人可以帮助我如何保留该价值。谢谢你

0 投票
1 回答
1167 浏览

java - 毕加索图像下载和缓存行为

所以我最近想尝试一下毕加索库的缓存功能,我遇到了这个令人困惑的情况:

我从我的网络服务器(使用 Retrofit2)检索图像的文件路径ImageComponent,并将它们存储到对象(模型)中:

所以现在加载成功了,我使用PicassoRecyclerView填充这些图像。加载和膨胀过程是成功的,但是在缓存图像时会有点棘手。

案例1:使用android.util.LruCache

(为方便起见,我会贴出整个Recyclerview适配器的代码,我会尽量简洁)

结果1

(注意最后两张图片,以及在显示正确图片之前它们如何显示其他先前的图片)

结果1

几点注意事项:

  • 我遇到了一个问题,根本没有显示图像。经过一番研究,我发现这个答案建议. (工作)targetImageView
  • 我不太明白毕加索是如何缓存图像的。是自动过程还是手动过程?该答案表明毕加索为您处理此任务。但是当我实际尝试时(没有 android Lrucache),似乎没有进行缓存:每次我来回滚动时,图像都会重新加载。
  • 实际上,我打算发布第二个用例,使用PicassoLrucache(图像随机显示,每次滚动都会更改),但我认为这篇文章已经足够长了。

我的问题是:

  1. 为什么我会出现这种奇怪的行为?(如附件GIF所示)
  2. 这整个缓存过程是如何工作的?在使用Picasso时我应该(或者我可以)使用 Lrucache吗?
  3. LrucacheSDK 自带的和Picasso的有什么区别?(性能、最佳用例场景等...)
0 投票
0 回答
619 浏览

android - 关闭应用程序时重置Android磁盘LRU缓存

这真的是预期的行为吗?我找不到有关此问题的任何文档。

0 投票
1 回答
732 浏览

java - java.lang.NoClassDefFoundError 在应用程序 onCreate 中初始化类

我正在尝试在我的应用程序onCreate方法上实例化一个类,如下所示:

以下是我的VolleySingleton

但是我的应用程序在启动时崩溃,并显示以下堆栈跟踪,说明没有找到类的类定义VolleySingleton

我对 java 和 android 还很陌生,无法弄清楚为什么它找不到类。据我了解,它能够找到该类,但异常发生在我试图定义的构造函数内部mImageLoader。不过我不确定。任何帮助将非常感激。

更新

好的,我尝试使用另一台设备(Samsung s4)启动该应用程序,该应用程序运行良好。但是当我用另一台设备(三星谷歌 Nexus S)尝试它时,它会因上述堆栈跟踪而崩溃。

更新#2

我错过了上面堆栈跟踪中的一些日志条目,也许这可以帮助弄清楚发生了什么。

0 投票
0 回答
1008 浏览

java - 如何清除 Android Volley 的 LRUImageCache 中的缓存以重新加载图像?

我正在使用 Volleys 库进行图像下载。当用户更改个人资料图像时,我将图像上传到服务器以替换以前的图像,因为我在数据库中使用用户的 ID,所以指向个人资料图像的链接始终相同。

我对缓存的问题是它无法替换缓存中的位图,在服务器返回成功响应并带有我想替换 NetworkImageView 中的图像的链接后,但这似乎不起作用。这是我的 LruImageCache 类

}

我的 AppController 中有这样的类

}

在完全上传图片并获取服务器返回的 url 后,我尝试只使用这一行,但它没有用

我还尝试调用 LruCache 从缓存中删除位图,以便我将图像重新设置回来,但似乎也不起作用。

我还尝试使用不同的方法手动下载位图,然后使用 new_url 作为键放入缓存中,但仍然无法正常工作。

任何帮助,如何替换缓存中的位图以便加载新上传的图像文件?我确定图像文件已上传到服务器,因为我可以打开它并看到它被替换。它现在工作的唯一方法是如果我关闭应用程序并重新打开它。