加载位图列表时出现 OOM 错误 Android

OOM Error when Loading a List of Bitmaps Android

我正在尝试在 android 中创建单人纸牌游戏,因此我正在尝试加载整副纸牌的图像(总共 53 张图像,正面 52 张,背面一张)的卡片)。图像加载得很好,但是当我尝试缩放它们以适合任何设备的屏幕时,通常在第 13 张卡附近出现内存不足错误。这是我缩放卡片的方法:

public ArrayList<Card> mapBitmapToCard(ArrayList<Card> listOfCards, ArrayList<Bitmap> listOfImages, int screenHeight){
        ArrayList<Card> result = new ArrayList<>();
        for (int i = 51 ; i >= 0 ; i--){
            Card card = listOfCards.get(i);
            card.setScaleFactor(screenHeight);
            Bitmap cardFront = listOfImages.get(i);
            listOfImages.remove(i);
            card.image = Bitmap.createScaledBitmap(cardFront, (int) (cardFront.getWidth() * card.scaleFactor), (int) (cardFront.getHeight() * card.scaleFactor), true);
            cardFront.recycle();
            Bitmap back = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.card_back));
            card.back = Bitmap.createScaledBitmap(back, (int) (back.getWidth() * card.scaleFactor), (int) (back.getHeight() * card.scaleFactor), true);
            back.recycle();
            result.add(card);
            System.out.println("" + (52 - i) + " cards completed");
        }
        return result;
    }

有没有什么方法可以更有效地解决这个问题?

一个直接的想法是不要加载所有这些然后缩放所有它们。加载后立即缩放它们,然后立即回收原始图像。这样一来,您在任何时候都有 1 个未缩放和 n 个缩放图像,而不是 53 个未缩放图像和 n 个缩放图像。

看起来您正在创建 52 个不同的缩小图像副本。不要那样做。缩放一次并重复使用相同的引用 - 制作 52 个副本会浪费内存并且可能是您的问题。无论如何,所有 52 个背面都是一样的,不是吗?