Вопрос по android – Исключение нехватки памяти в Android при добавлении некоторых кнопок изображений

1

Я написал небольшой проект Android, который показывает некоторые кнопки (изображения). Он отлично работает на моем телефоне (Galaxy S), но при попытке запустить его на эмуляторе выдает следующую ошибку: Причина: java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины

Пожалуйста, обратите внимание, первое действие имеет 8 кнопок изображения, и это дает исключение из памяти. Когда я удаляю 3 кнопки, все работает нормально. На самом деле, он работает нормально, пока scrollView не активен, и если я добавлю эти 3 удаленные кнопки (так, scrollView будет виден), он выдаст ошибку памяти. Я думаю, это "нехватка памяти" исключение не связано с количеством кнопок (изображений), но связано с фоновым изображением. Вот мой XML-файл:

<code><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/image"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scaleType="center"
            android:src="@drawable/backgrounmobile" />

        <ScrollView
            android:id="@+id/ScrollView01"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="left|top|bottom|right" >

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/centerlayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="right|top|bottom"
                android:layout_marginBottom="10dip"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="20dip"
                android:layout_marginTop="0dip"
                android:orientation="vertical" >

                <Button
                    android:id="@+id/divan"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/divanbtn" />

                <Button
                    android:id="@+id/boostan"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/boostanbtn" />

                <Button
                    android:id="@+id/mavaez"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/mavaezbtn" />

                <Button
                    android:id="@+id/hekayat"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/hekayatbtn" />

                <Button
                    android:id="@+id/saadiname"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/saadinamebtn" />

                <Button
                    android:id="@+id/settings"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/settingsbtn" />

                <Button
                    android:id="@+id/about"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/aboutbtn" />
            </LinearLayout>
        </ScrollView>
    </FrameLayout>

</LinearLayout>
</code>

Не могли бы вы помочь мне?

На этом сайте есть вопросы размером 4K + с "размером растрового изображения, превышающим бюджет виртуальной машины" ... Mat

Ваш Ответ

3   ответа
3

и лучший способ исправить это - использовать меньше памяти, загрузка небольших изображений поможет вам в этом, и команда Google Googles была достаточно любезна, чтобы выложить краткое описание того, как это сделать. :)

http: //developer.android.com/training/displaying-bitmaps/load-bitmap.htm

Большое спасибо. На самом деле размер изображений составляет 500 * 360 пикселей, но их размер не превышает 80 КБ. Я думаю, что я должен изменить их размер. Farid Ala
Размер на диске не соответствует занимаемой памяти после загрузки изображений в память (и их дефляции). Обычно вы можете предположить, что любое изображение будет использовать ширину * высоту * 4 байта памяти после загрузки в память. erbsman
Эта ссылка действительно помогает. Для тех, кто читает это, прочитайте это! whyoz
3

определяющие кнопки (размер файла, а не размеры изображения)? Кажется, что они слишком велики. Android должен загрузить их все сразу в основную память, чтобы отобразить их.

Для моего приложения все эти файлы находятся в диапазоне 0,5 ~ 2 КБ

Тогда это может быть вашей проблемой, они должны быть такими, как указал Хейко, НАМНОГО меньше. erbsman
Я знаю, их размер не превышает 80 КБ. Вот почему это дает исключение? Farid Ala
1
Большое спасибо Farid Ala

Похожие вопросы