首页 > 解决方案 > android 数组无法存储 2.4MB 的数据

问题描述

我试图通过快速切换图像和扩展视图来制作自定义动画播放器,所以我不得不将BitMaps 加载到一个数组中,整个142图像只有 2.4MB 大小,我什至声明android:largeHeap="true"Manifest给出了内存错误。源代码如下:

package com.mexample.bitsmap;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;

public class bitMapTest extends View {
    long startTime=0;
    long endTime=0;
    int[] drawables;
    int noOfImages = 0;
    int I = 0;
    long drawStartTime = 0;
    long drawEndTime = 0;

    int scaleWidth = 400;
    int scaleHeight = 225;
    Bitmap scaledImage = null;

    public bitMapTest(Context context) {
        super(context);

        long loadStartTime = System.nanoTime();
        Bitmap[] drawables = new Bitmap[]{
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_000),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_001),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_002),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_003),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_004),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_005),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_006),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_007),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_008),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_009),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_010),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_011),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_012),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_013),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_014),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_015),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_016),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_017),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_018),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_019),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_020),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_021),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_022),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_023),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_024),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_025),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_026),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_027),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_028),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_029),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_030),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_031),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_032),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_033),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_034),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_035),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_036),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_037),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_038),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_039),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_040),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_041),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_042),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_043),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_044),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_045),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_046),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_047),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_048),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_049),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_050),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_051),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_052),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_053),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_054),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_055),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_056),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_057),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_058),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_059),
             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_060),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_061),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_062),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_063),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_064),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_065),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_066),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_067),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_068),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_069),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_070),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_071),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_072),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_073),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_074),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_075),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_076),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_077),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_078),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_079),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_080),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_081),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_082),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_083),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_084),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_085),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_086),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_087),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_088),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_089),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_090),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_091),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_092),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_093),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_094),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_095),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_096),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_097),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_098),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_099),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_100),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_101),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_102),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_103),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_104),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_105),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_106),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_107),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_108),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_109),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_110),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_111),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_112),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_113),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_114),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_115),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_116),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_117),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_118),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_119),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_120),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_121),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_122),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_123),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_124),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_125),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_126),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_127),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_128),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_129),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_130),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_131),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_132),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_133),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_134),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_135),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_136),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_137),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_138),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_139),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_140),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_141),
//             BitmapFactory.decodeResource(getResources(), R.drawable.atoms_142)
        };

        long loadEndTime = System.nanoTime();
        noOfImages = drawables.length;
        Log.e("measure: ", "BitMaps loaded in: " +((loadEndTime - loadStartTime)/1000000000.0)+ " seconds" );
    }

    @Override
    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);
//        I = I % noOfImages;
//
//        if(I==0){
//            drawStartTime = System.nanoTime();
//            Log.e("measure: ", "draw startTime: "+ drawStartTime/1000000000.0);
//        }
//
//        Bitmap newImage = BitmapFactory.decodeResource(getResources(),drawables[I++]);
//        scaledImage =  Bitmap.createScaledBitmap(newImage,scaleWidth, scaleHeight, false);
//
//        canvas.drawBitmap(scaledImage, 0,0,null);
//        if(I==noOfImages){
//            drawEndTime = System.nanoTime();
//            Log.e("measure: ", "draw endTime: "+ drawEndTime/1000000000.0 );
//            Log.e("measure: ", "drawing time taken: "+ (drawEndTime-drawStartTime)/1000000000.0 );
//        }

//        invalidate();

    }


}

我什至只评论了60图像,但仍然给出:OutOfMemory exception. 为什么会这样?

标签: androidarraysmemorybitmapfactory

解决方案


推荐阅读