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

使用DiskLRUCache的Android照片/缩略图策略,android,android-intent,Android,Android Intent,我在用lib 我对应用程序的性能、缓存策略以及在视图中和整个应用程序中使用缓存感到好奇。大多数时候,图像不会改变 比如说,我的服务器上有一张320x320的照片。我打开流,保存图像 在我的列表视图中,我显示位图,在细节中,我显示更大的图像。我也应该保存缩略图位图吗?这样更有效吗 您在整个应用程序中共享缓存“对象”的经验如何(假设我有多个视图可能利用相同的数据。这有什么问题 出于性能和通用性的考虑,如果服务器上的图像发生了更改,该怎么办?知道图像已更改的最佳策略是什么?我没有访问修改日期的权限。仅

我在用lib

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

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

  • 在我的列表视图中,我显示位图,在细节中,我显示更大的图像。我也应该保存缩略图位图吗?这样更有效吗

  • 您在整个应用程序中共享缓存“对象”的经验如何(假设我有多个视图可能利用相同的数据。这有什么问题

  • 出于性能和通用性的考虑,如果服务器上的图像发生了更改,该怎么办?知道图像已更改的最佳策略是什么?我没有访问修改日期的权限。仅查看大小,但我也不想每次都查询大小。在服务器上的应用程序中设置一个标志,然后查询该标志

  • 在传统的应用程序中(如果存在这样的情况),什么是不时清除缓存的最佳实践?(缩进奇怪。)

  • (我是在看到Facebook在iOS上的所有性能改进后才写这篇文章的。我没有几十亿的钱来做缓存,但我想至少聪明一点!哈哈)

    这些答案中有很多取决于你正在编写的应用程序的类型、图像更新的重要性(以及图像改变的可能性等等),以及生成的总图像。除了磁盘缓存外,您还应该使用内存缓存,尤其是在ListView和其他重复滚动相同图像的区域。请查看并阅读Google提供的条目

    320x320对于listview来说可能太大了,您可能需要创建缩略图(取决于设备以及如何实现listview)

    1) 你应该相当积极地使用磁盘缓存(如何定义它取决于你正在编写的应用程序)。使用外部存储目录,如果它们还有几GB的剩余空间,那么以应用程序为例,使用100 mb也不是问题。不管怎样,只要有需要,它都可以被清除掉

    2) 不应该有问题。不应在主线程上处理磁盘IO(即使是闪存介质)。使用AsyncTasks加载图像。无论如何,一次只能有一个主要的前台活动,当一个活动处于睡眠状态时,它无论如何都不应该试图从磁盘读取

    3) 同样,这取决于你如何实现你的应用程序。在检索文件时,您应该能够获得其他信息(甚至Apache也可以告诉您的应用程序上次修改的日期)。 3.1)您可以拥有一个sqllite数据库,用于跟踪特定图像的使用频率和最近的读取。如果最近一次读取已过几天,则让该映像过期

    编辑:我建议使用杰克·沃顿(Jake Wharton)的一个名为毕加索(Picasso)的库,它处理网络/本地IO以及内存和磁盘缓存。请在此处查看:。你需要做的很多事情都可以通过一行来完成:
    Picasso.with(this).load(imageFileURL).into(imageView)