内存不足错误未解决

时间:2015-06-17 10:38:39

标签: android bitmap

我从内部存储器中取出图像并将其粘贴在合并功能中的伟大图像上。在66图像之后,应用程序崩溃严重,错误内存不足。你有任何想法为什么应用程序崩溃以及如何解决它。应用程序崩溃后图像没有66来了`

     public void mergeImageClicked(View v) {
    int noOfImage = listFile.length;
    Bitmap[] bitmap = new Bitmap[noOfImage];
    Bitmap[] resizedBitmap = new Bitmap[noOfImage];
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    for (int j = 0; j < listFile.length; j++) {
        bitmap[j] = BitmapFactory.decodeFile(listFile[j].getAbsolutePath(), options);


        resizedBitmap[j] = ThumbnailUtils.extractThumbnail(bitmap[j], 30, 30);

    }

`

2 个答案:

答案 0 :(得分:4)

您在位图数组中保留了大量的完整大小的位图。相反,你应该只保留一个位图来加载和调整大小。

public void mergeImageClicked(View v) {
   int noOfImage = listFile.length;
   Bitmap[] resizedBitmap = new Bitmap[noOfImage];
   BitmapFactory.Options options = new BitmapFactory.Options();
   options.inPreferredConfig = Bitmap.Config.ARGB_8888;
   for (int j = 0; j < listFile.length; j++) {
      Bitmap bitmap = BitmapFactory.decodeFile(listFile[j].getAbsolutePath(), options);

      resizedBitmap[j] = ThumbnailUtils.extractThumbnail(bitmap, 30, 30);
}

答案 1 :(得分:1)

Android上每个应用的内存有限。查看堆大小和内存管理here

在您的代码中,您似乎正在解码Bitmap然后保留在内存中,这是不好的做法 - 因为您迟早会耗尽内存。

最好只保留您需要的位图,然后在不需要时释放。请看一下如何管理Bitmaps