【问题标题】:Loading a lot of images to memory causes Out of memory exception - Android将大量图像加载到内存会导致内存不足异常 - Android
【发布时间】:2012-02-27 09:40:48
【问题描述】:

我有点迷茫:

案例 1:我尝试制作包含 26 张图片的动画(每张图片大小约为 200KB)。总计为 5,3 MB。动画效果很好。图像已加载到内存中,一切正常。

案例 2:现在,当我尝试制作包含 129 个图像(每个大约 30KB,总共 4.6 MB)的动画时,我遇到了内存不足异常。

我正在跟踪内存分配,在“案例 1”中,加载后每个位图的加载位图图像大小为 691200 字节。在“case 2”中,每个文件的位图大小约为 563520 字节。

使用getRowBytes() * getHeight() 进行计算

这很奇怪,“case 2”中的图像尺寸大约缩小了 6 倍,但加载后尺寸却完全一样。

这就是我将位图加载到内存的方式:

       for (int i = 0; i <= 128; i++) {
            imagesHolder[i] = BitmapFactory.decodeResource(
                    getApplicationContext().getResources(),
                    getApplicationContext().getResources().getIdentifier(
                            "image" + (i + 1) + "", "drawable",
                            getApplicationContext().getPackageName()));
            System.out.println(imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight());
            totalSize+=imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight();
            System.out.println("TOTAL: "+totalSize);
        }

那么,为什么我的小图像在加载到内存后会变得如此之大?所有提示表示赞赏。 :)

【问题讨论】:

  • case2的位图分辨率高于case1?
  • 在 case2 中位图分辨率为“391*320”,在 case1 中为“320*480”。那么解决方案可以成为这里的关键吗?
  • 分辨率是关键。图像像素数据将占用宽度 * 高度 * 深度 (4) 个字节。

标签: android bitmap out-of-memory


【解决方案1】:

这不是确定存储位图所需内存量的精确方法。每个Bitmap 对象都包含一些额外的字段,这些字段也需要内存。 看这个问题:Android & Dalvik - Get the size of an object

【讨论】:

  • 我的计算结果与错误信息相符 - E/dalvikvm-heap(2244): 563520-byte external allocation too large for this process.
【解决方案2】:

我们可以开发最大 50MB 内存的应用程序大小(.apk)。垃圾收集器也有可能无法回收内存。所以你最终必须回收位图;在处理没有位图时,我们还必须考虑内存问题.... 如果(!bmp.isRecycled()){ bmp.recycle();}

【讨论】:

  • 我实际上并不想为我的手机制作可循环的动态壁纸。所以我应该在循环播放视频时回收和重新加载图像? (视频转图片)
  • 是的。在使用当前位图时,回收当前未使用的位图。
  • mb = 毫比特...很确定您的意思是 MB = 兆字节。
  • 谢谢大家。我设法让它在第一个循环中工作。图像得到回收,内存使用稳定。但现在我收到“Canvas.throwIfRecycled”错误。这意味着我正在尝试重新初始化回收的位图。似乎回收后图像仍然存在但未链接。有没有办法在展示后从内存中删除它们?
  • 对于一个简单的循环很多问题,猜测这不是循环视频的最佳方式:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2014-03-28
  • 2017-08-23
  • 2014-06-07
  • 2014-03-13
  • 2011-07-16
相关资源
最近更新 更多