gpt4 book ai didi

使用 DiskLRUCache 的 Android 照片/缩略图策略

转载 作者:行者123 更新时间:2023-11-29 18:08:27 30 4
gpt4 key购买 nike

我正在使用 Jake Wharton's DiskLruCache图书馆。

我对应用程序性能、缓存策略以及在 View 中和整个应用程序中使用缓存感到好奇。大多数时候,图像不会改变。

例如,假设我的服务器上有一张 320x320 的照片。我打开流,保存图像。

  1. 在我的 ListView 中,我显示位图,在细节中,我显示更大的图像。我是否也应该保存缩略图位图?这样效率更高吗?

  2. 您对在整个应用程序中共享缓存“对象”有何体验(假设我有多个 View 可能利用相同的数据。这有什么问题?

  3. 为了性能和货币,如果服务器上的图像发生变化怎么办。知道它已更改的最佳策略是什么?我无权访问修改日期。只有尺寸,但我也不想每次都查询尺寸。在服务器上的应用程序中设置一个标志,然后查询标志?

    1. 在传统应用程序中(如果有的话),不时清除缓存的最佳做法是什么? (缩进很奇怪。)

(在看到 Facebook 在 iOS 中的所有性能改进后,我受到了写这篇文章的启发。我没有数十亿的资金来做缓存,但我想至少要聪明一点!大声笑)

最佳答案

其中很多答案取决于您正在编写的应用程序类型、图像更新的重要性(以及图像发生变化的可能性等)以及生成的图像总数。除了磁盘缓存之外,您还应该使用内存缓存,尤其是在 ListViews 和其他将重复滚动相同图像的区域中。看LruCache并阅读 Caching Bitmaps来自谷歌的条目。

320x320 对于 ListView 来说可能太大了,您可能想要创建缩略图(取决于设备以及您实现 ListView 的方式)。

1) 你应该相当积极地使用磁盘缓存(你如何定义它取决于你正在编写的应用程序)。使用外部存储目录,如果它们还剩几 GB,例如为您的应用程序占用 100 MB 就不是问题。如果无论如何都需要,可以将其全部清除。

2) 应该没有问题。磁盘 IO(甚至是闪存介质)永远不应在主线程上处理。使用 AsyncTasks 加载图像。无论如何,一次只能有一个主要的前台 Activity ,并且当一个 Activity 处于休眠状态时,无论如何它都不应该尝试从磁盘读取数据。

3) 同样,这取决于您实现应用的方式。您应该能够在检索文件时获得其他信息(即使 Apache 也可以告诉您的应用程序最后修改日期)。3.1) 你可以有一个 sqllite 数据库来跟踪某些图像的使用频率和最近的读取。如果最近的阅读是几天前的,让该图像过期。

编辑:我推荐使用 Jake Wharton 的库,现在称为 Picasso,它处理网络/本地 IO 以及内存和磁盘缓存。在这里查看:http://square.github.io/picasso/ .您需要做的很多事情都可以用一行代码完成:Picasso.with(this).load(imageFileURL).into(imageView);

关于使用 DiskLRUCache 的 Android 照片/缩略图策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12123109/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com