使用DiskLRUCache的Android照片/缩略图策略
我在用lib 我对应用程序的性能、缓存策略以及在视图中和整个应用程序中使用缓存感到好奇。大多数时候,图像不会改变 比如说,我的服务器上有一张320x320的照片。我打开流,保存图像使用DiskLRUCache的Android照片/缩略图策略,android,android-intent,Android,Android Intent,我在用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)代码>