【问题标题】:how to cache images?如何缓存图像?
【发布时间】:2015-03-25 04:29:44
【问题描述】:

我正在编写一个具有图像提要的 android 应用程序,例如 instagram 应用程序。我的问题是如何缓存这些图像,以免出现内存不足异常?

我已经阅读了一些教程,但它们都是在 LruCache 中缓存位图。我可能错了,但我认为 ImageView 中的位图和缓存的位图使用相同的内存量。

我正在考虑将压缩图像(例如 JPEG)存储在内存缓存中(当然还有磁盘上),并仅在屏幕上可见时才显示它,但随后 CPU 会吃光电池,因为它会在 ImageView 不可见时不断清除它并解压缩图像并在它位于视口中时显示它。而且我不确定滚动是否会无延迟,即使我在新线程上进行。

另一种方法是像我上面描述的那样做,但我不会立即从图像视图中删除位图,只有当有很多图像并且我会用完内存时。

你怎么看?

【问题讨论】:

标签: android performance caching


【解决方案1】:

以下是有关如何在内存和磁盘中缓存图像的分步示例:

http://androidexample.com/Download_Images_From_Web_And_Lazy_Load_In_ListView_-_Android_Example/index.php?view=article_discription&aid=112&aaid=134

但您也可以使用已经运行良好的库,例如:

http://square.github.io/picasso/

第一个链接还包含有关如何处理位图以避免outOfMemory.的说明

【讨论】:

  • 但这两个都是带有文件缓存回调的缓存位图。没有其他方法吗?
  • 从磁盘加载速度很慢,我想要内存中的所有内容(或几乎所有内容)
  • 是的,它比较慢。但是你没有地方可以去这里。进入磁盘后,您只能选择要带入内存的内容。所以,这取决于你想要完成什么。
  • 好的,谢谢。但是将压缩图像存储在 ram 中呢?解压 jpeg 是不是非常密集的操作?
  • 是的,考虑到我们在移动设备方面的资源普遍不足,这是一项密集的操作。这里有一些很酷的提示:developer.android.com/training/displaying-bitmaps/index.html
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多