问题标签 [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.
android - 位图正在保存到 LruCache 但无法获取
我将 GridView 中的位图缓存到 LruCache。我为此做了经理,见下文:
当我调用addBitmapToMemoryCache()
我的 AsyncTask 将位图保存到 MemoryCache 时。
但是当我打电话给getBitmapFromMemoryCache()
它时null
。
这意味着, AsyncTask 被一次又一次地调用。在 AsyncTask 中,我将位图添加到 LruCache。因为返回的Bitmap为null,所以LruCache中没有保存Bitmap。但我不知道为什么。我也在网上搜索,它可能与回收/垃圾收集器有关。
那么如何正确加载缓存的图像?
任何帮助或澄清都是合适的。
编辑:
我在 getView() 方法中的 BaseAdapter 中调用它。我认为这与它有关。第一次,每个图像都被添加到缓存中,但随后,第一张图像被添加了 10 次。
android - ListView 图像和使用 convertView
我在 ListView 中加载图像并使用 convertView 添加新项目。我发现当我快速向下滚动时,来自几个屏幕的图像会显示在当前屏幕之前。在 getView 中,我正在实例化一个 AsyncTask。我该如何解决?使图像缓存起作用,还是我必须找到一种与已启动的 AsyncTask 通信并告诉它们停止加载不会显示的图像的方法?
以下是相关代码:
android - Volley DiskBasedCache 抛出 FileNotFoundException
我正在使用Trey Robinson 的 BitmapLRUCache在我的 Android 应用程序中进行图像缓存。它是 Volley 的 LRU 缓存实现,因为它本身不提供任何图像缓存。
尽管它确实使用DiskBasedCache来缓存 HTTP 请求。现在遇到问题,当 DiskBasedCache 尝试获取或删除缓存条目时,我反复收到 FileNotFoundExceptions。
下面的示例日志。
当我使用 BitmapLRUcache(见下文)初始化 ImageLoader 时,为什么 DiskBasedCache 处理图像缓存?
下面是我用于缓存的代码。
android - 如何将 URL 转换为位图,将它们存储在缓存中,并在 Listview 中显示?
我不是要代码,我只需要一些关于解决问题的指导。我是 Android 新手,我正在做一个小项目,我从 Google 图片 API 解析 JSON 以获取某个关键字的图片的 url 链接。我已经成功解析了 JSON,创建了一个 ListView + ArrayAdapter,并在 Listview 中显示了每个 URL。现在我必须弄清楚如何将这些链接变成图像(我认为使用位图),并将它们显示在 Listview 中。我不想将它们加载到 SD 卡,因为这会占用每个图像的磁盘空间,而是将它们存储在缓存中。问题是,我不能使用任何第三方库进行缓存. 我在 Google 上搜索过,大部分都找到了诸如“LazyLoad”和“Universal Image Loader”之类的东西,但不幸的是它们似乎是第三方的,而不是官方的。我在 Android 开发者网站上找到了“LruCache”,但对我来说是最好的吗?你能告诉我还有什么其他的方法可以解决我的问题吗?
谢谢!
android - Android LRU 缓存内存不足错误
我正在使用 LRu Cache 从 http 协议下载和显示图像。我的应用是一个有 5 个片段的 Activity。每个片段加载一个带有图像和文本的自定义 ListView。
我的应用程序总是在一段时间后崩溃。
这是我的 LogCat:
11-03 18:00:22.613: E/dalvikvm-heap(1558): 为进程生成 hprof: com.example.example PID: 1558 11-03 18:00:24.004: E/dalvikvm(1558): 不能打开 /data/misc/app_oom.hprof: 权限被拒绝 11-03 18:00:24.064: E/dalvikvm-heap(1558): hprofDumpHeap 失败,结果:-1 11-03 18:00:24.064: E/dalvikvm-堆(1558):在进程 11-03 18:00:24.064 的 hprofDumpHeap 之后:E/dalvikvm(1558):内存不足:堆大小=196608KB,分配=193561KB,限制=196608KB,过程限制=196608KB 11-03 18 :00:24.064: E/dalvikvm(1558): 额外信息:足迹=196552KB,允许的足迹=196608KB,修剪=12KB
这是我的 LRU 课程:
我在这个论坛和谷歌搜索了如何解决这个问题,但我没有解决它。任何人都可以帮助我吗?我的应用程序的目标来自 sdk 8。
提前致谢。
android - 图像的链接存储在 sqllite DB 中,如何缓存
图像的链接存储在 sqllite 数据库中,我需要在 gridView 中显示它们。但是,有人告诉我它们需要缓存到磁盘。
我的问题是我要遵循哪些步骤?我是否首先将数据库中的链接存储到磁盘 Cache 对象中,然后使用磁盘 Cache 对象来填充 gridView ?
android - 如何在 DiskLruCache 中创建子目录?
我在我的项目中使用 DiskLruCache。它工作得很好,但我想知道是否可以在根缓存目录下创建子目录。
例如:
MainCache 及其子目录下的文件总大小仍应遵守 1GB 策略。
android - Android BaseAdapter 和 LruCache 一些 ui 问题
我正在尝试在基本适配器和 LruCache 的帮助下实现包含所有联系人图像的列表视图。但是在屏幕上的长滚动上,所有图像(对应于该视图)都会在设置实际图像之前显示。
例如:每页 5 个项目的列表视图,如果我们从第一个联系人滚动到第 60 个,则在第一个列表视图的第一个视图中,1、6、11、16、21..51 的图像在第 55 个图像之前显示几毫秒显示
主要代码是
BitmapManager 后执行代码
如何解决这个问题呢。谢谢
android - 在 Appwidget 中准备 LruCache
我有一个当用户点击它appwidget
时启动的。activity
在我的活动中,我有一个gridview
包含相对较小的Drawables
(图像,因为可绘制可能不仅仅是图像),但用户可以size
。
我注意到它需要too Long to size them at runtime when Scrolling trough the gridview.
我想在用户将 appwidget 放在屏幕上时一开始就调用它lruCache
。one time
appWidget's onUpdate
问题
当我在我的 appWidget 中定义一个 lruCache 时
只要appWidget的进程存在,它就存在吗?或者来自 lruCache 的缓存文件是否保留在我的应用程序的 cacheDir 中?还是会在appWidget的进程完成后被删除?如果它确实存在于我的 appWidget 的整个进程生命周期中,我如何从我的 Activity 中访问它?
我不想每次用户单击 appWidget 时都创建一个 LruCache 并用 gridview 稍后需要的所有相对较小的图像填充它。我想这样做一次,或者如果用户清除每小时检查一次的缓存(以节省电池)。
问题
我怎样才能做到这一点?还是有更好/更简单的方法。
时间并不是真正(if it happens once at the very beginning)
的问题,我在将 appWidget 放置在屏幕上时通知用户正在准备缓存。
任何帮助表示赞赏。
关于CommonsWare
回答者的更新
Use Traceview to determine specifically why your implementation is slow.
应用程序滚动很慢,因为我提供了三种尺寸(小、中、大)并且我在通过我的 gridview 滚动时缩放它们。(因为在活动启动时缩放它们需要几秒钟,所以我不想要那个)。
在这里查看我在我的图像视图中所做的事情,稍后将显示可绘制对象(这是一个 appIcon):
这会导致滞后,因为我对每个图像都执行此操作,具体取决于所选比例大小是中小还是大。
There is no "Cache-File" in your code.
那么我误解了一些东西。lruCache 不会在我的应用程序的 Cache-Directory 中创建一个 Cache-File 吗?如果不是,如何工作?
First, you cannot force the user to install the app widget. Work on solving the actual performance problem, rather than trying to build some optimization that will not help all users.
我的“应用程序”只是一个应用程序小部件。没有像 FaceBook 那样的 appIcon。当他加载我的应用程序时,它只是一个 appWidget。当您单击按钮时,它会启动一个活动。
Second, your process can readily be terminated milliseconds after onUpdate() completes. Do not fill a cache, only to have it never be used.
我想使用我想用onUpdate
appWidget中的Drawables填充的缓存,然后我想在我的活动中使用缓存中的这些Drawables。所以我不明白为什么我永远不会使用缓存?也许我误解了什么。
Picasso would give you better performance from the user's standpoint.
现在更新后是否符合我的需求?
-------------------------------------------------- ------------------------------------------
更新 2
Since the scaling should be done by the GPU and take microseconds, I have difficulty believing that is your problem. What specifically did Traceview show you that made you think that scaling has something to do with this?
我注意到 Scrolling 在中等大小时非常流畅,因为这几乎是PackageManager
. 如果滚动槽很大,每行只显示 2 或 3 个应用程序图标(在中等显示 5 或 6 个,但它更流畅)m 它会滞后。(其背后的逻辑相同)。因此,唯一的逻辑答案可以在 ImageView 的 XML 中进行缩放。正如我评论 XML-Scaling 并将 appIcons 缩放到大尺寸并将它们直接缩放到我的 GridView 适配器时,它运行非常流畅(一开始只有一个或非常小的滞后,因为convertView
它是空的??)
onUpdate() will be called much more frequently than the user will actually use your app widget.
那是在每次点击之后或在指定时间。但是我检查缓存是否已被清除,如果没有,请不要更改任何内容,如果是,请将 Drawables 加载到缓存中。
android - 无法重用片段以使用 LruCache
我正在使用 Google 的示例在配置更改中缓存位图,几乎是逐行的:
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#config-changes
我在更新字段时调用 addBitmapToMemoryCache,这是在配置更改(设备轮换)之前的方式。但是,将调试信息放入 findOrCreateRetainFragment 后:
该片段始终是新实例化的,因此我永远无法访问旧的 LruCache,尽管setRetainInstance(true)
. 谷歌的例子有问题吗?我正在使用 v4 支持 FragmentManager。
这是我的 onCreate 的相关部分: