Android SDK - предварительная загрузка небольших изображений заставляет мое приложение превышать память - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь написать простое приложение для Android.Я пытаюсь предварительно загрузить 7 изображений JPG, каждый размером ~ 75 КБ и разрешением 768x480.При запуске на HTC Flyer работает нормально.При запуске на HTC Evo 3D он вылетает.По-видимому, я выделяю слишком много памяти:

1658880-byte external allocation too large for this process.
Out of memory: Heap Size=6663KB, Allocated=4297KB, Bitmap Size=25278KB, Limit=32768KB
Trim info: Footprint=6663KB, Allowed Footprint=6663KB, Trimmed=452KB
VM won't let us allocate 1658880 bytes
Clamp target GC heap from 33.136MB to 32.000MB

, что кажется довольно странным.Я должен создавать меньшие изображения?Мне кажется маловероятным, учитывая сегодняшние экраны с высоким разрешением.Должен ли я увеличить размер кучи?Ну, это поддерживается только с Android 3.0.Каково правильное решение?Btw.код, который я использовал для предварительной загрузки изображений:

    stringsImages = new Drawable[]{
            getResources().getDrawable(R.drawable.strings0),
            getResources().getDrawable(R.drawable.strings1),
            getResources().getDrawable(R.drawable.strings2),
            getResources().getDrawable(R.drawable.strings3),
            getResources().getDrawable(R.drawable.strings4),
            getResources().getDrawable(R.drawable.strings5),
            getResources().getDrawable(R.drawable.strings6)
    };

Чтобы избежать путаницы в вычислениях, я также использую ~ 5 МБ дополнительно для расчетов на аудиоданных.

1 Ответ

1 голос
/ 28 февраля 2012

Если вам не хватает памяти, попробуйте выполнить подвыборку каждого рисованного элемента. Это уменьшает размер изображения для экономии памяти. Посмотрите документы здесь , чтобы понять, как это работает. Я сделал это и сохранил память и никогда не видел разницы в качестве. Попробуйте запустить этот код на каждом изображении:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 4; //the higher this number goes, the smaller the image gets
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.strings0, options);

Затем вы можете установить для каждого растрового изображения значение ImageView с помощью imageView.setImageBitmap(bitmap1);

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...