在Android应用程序中管理位图和内存缓存

时间:2014-05-30 04:10:27

标签: android ios memory-management bitmap picasso

我们有一个应用程序可以同时在网格中显示大量图像 让我们说一个50-60张图片的网格每个占用1/4的屏幕 我们使用毕加索库来管理它们。

我目前的理解是:

  • 加载图片后,它以ARGB8888格式存储在内存中,因此每像素4个字节
  • 每张图片是屏幕的1/4,因此在1080屏幕上,这是960x540x4~ - 每位图2MB
  • 这意味着保留60张照片所需的总内存为120MB,这比从app堆分配给毕加索内存缓存的方式更多(并且可能比许多系统上的app堆本身更多)

这意味着当我们向右滚动网格时,左边的图片正在从内存缓存中逐出,所以当我们快速向左滚动时,我们会看到它们再次从磁盘缓存中加载(占位符可见一会儿)。这是糟糕的用户体验,用户希望它们已经加载。

不知何故在iphone上(使用SDWebImage库),这从来都不是问题。我假设iPhone没有保留ARGB8888格式的UIImage,而是将其保存为内存中的JPEG压缩或使用GPU /图形系统可以理解的内部压缩格式。

我错过了什么?如何在Android上处理/显示大型图像集?

由于

1 个答案:

答案 0 :(得分:0)

你试过在AndroidManifest中设置一个大堆吗?此功能仅适用于Honeycomb SDK

<application
    android:largeHeap="true"/>