Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
niki2012
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 15
#1

Grow heap (frag case) to 54 MB - Программирование Android

30.07.2013, 15:43. Просмотров 1203. Ответов 6
Метки нет (Все метки)

В программе для отображения информации использую 5 ImageView с Level-List. Все 5 xml файлов такого вида, различаются только ресурсы картинок
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:maxLevel="1" android:drawable="@drawable/wave11"/>
    <item android:maxLevel="2" android:drawable="@drawable/wave12"/>
    <item android:maxLevel="3" android:drawable="@drawable/wave13"/>
    <item android:maxLevel="4" android:drawable="@drawable/wave14"/>
</level-list>
Программно создаю 5 ImageView и устанавливаю им ресурсы (wave1, wave2 и тд - xml-файлы)
Java
1
2
3
4
5
image[0].setImageResource(R.drawable.wave1);
image[1].setImageResource(R.drawable.wave2);
image[2].setImageResource(R.drawable.wave3);
image[3].setImageResource(R.drawable.wave4);
image[4].setImageResource(R.drawable.wave5);
Все используемые в приложении изображения вместе весят не больше 200 килобайт.
При этом при запуске в Log'e появляются сообщения об увеличении объема используемой приложением оперативной памяти:
07-30 15:33:29.685: I/dalvikvm-heap(31125): Grow heap (frag case) to 13.317MB for 518416-byte allocation
07-30 15:33:29.725: I/dalvikvm-heap(31125): Grow heap (frag case) to 15.292MB for 2073616-byte allocation
07-30 15:33:29.825: I/dalvikvm-heap(31125): Grow heap (frag case) to 17.295MB for 2073616-byte allocation
07-30 15:33:29.895: I/dalvikvm-heap(31125): Grow heap (frag case) to 19.273MB for 2073616-byte allocation
07-30 15:33:30.010: I/dalvikvm-heap(31125): Grow heap (frag case) to 21.250MB for 2073616-byte allocation
07-30 15:33:30.055: I/dalvikvm-heap(31125): Grow heap (frag case) to 23.229MB for 2073616-byte allocation
07-30 15:33:30.105: I/dalvikvm-heap(31125): Grow heap (frag case) to 25.208MB for 2073616-byte allocation
07-30 15:33:30.150: I/dalvikvm-heap(31125): Grow heap (frag case) to 27.186MB for 2073616-byte allocation
07-30 15:33:30.200: I/dalvikvm-heap(31125): Grow heap (frag case) to 29.165MB for 2073616-byte allocation
07-30 15:33:30.250: I/dalvikvm-heap(31125): Grow heap (frag case) to 31.142MB for 2073616-byte allocation
07-30 15:33:30.295: I/dalvikvm-heap(31125): Grow heap (frag case) to 33.122MB for 2073616-byte allocation
07-30 15:33:30.340: I/dalvikvm-heap(31125): Grow heap (frag case) to 35.099MB for 2073616-byte allocation
07-30 15:33:30.390: I/dalvikvm-heap(31125): Grow heap (frag case) to 37.077MB for 2073616-byte allocation
07-30 15:33:30.455: I/dalvikvm-heap(31125): Grow heap (frag case) to 39.055MB for 2073616-byte allocation
07-30 15:33:30.495: I/dalvikvm-heap(31125): Grow heap (frag case) to 41.035MB for 2073616-byte allocation
07-30 15:33:30.540: I/dalvikvm-heap(31125): Grow heap (frag case) to 43.012MB for 2073616-byte allocation
07-30 15:33:30.610: I/dalvikvm-heap(31125): Grow heap (frag case) to 44.990MB for 2073616-byte allocation
07-30 15:33:30.665: I/dalvikvm-heap(31125): Grow heap (frag case) to 46.968MB for 2073616-byte allocation
07-30 15:33:30.715: I/dalvikvm-heap(31125): Grow heap (frag case) to 48.948MB for 2073616-byte allocation
07-30 15:33:30.760: I/dalvikvm-heap(31125): Grow heap (frag case) to 50.925MB for 2073616-byte allocation
07-30 15:33:30.810: I/dalvikvm-heap(31125): Grow heap (frag case) to 52.904MB for 2073616-byte allocation
07-30 15:33:30.865: I/dalvikvm-heap(31125): Grow heap (frag case) to 54.881MB for 2073616-byte allocation

(Если закомментить те пять строк с установкой ресурсов для ImageView[], сообщения не появляются)

Почему мало весящие изображения могут так сильно грузить оперативную память устройства?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 16:40     Grow heap (frag case) to 54 MB #2
У вас все изображения хранятся в каталоге drawable или для каждого экрана есть свои копии с разными разрешениями (в каталогах drawable-mdpi, drawable-hdpi и пр)? И покажите код одного из wave.xml.
niki2012
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 15
30.07.2013, 19:09  [ТС]     Grow heap (frag case) to 54 MB #3
Все изображения хранятся в единственной версии в папке drawable, код xml для wave1 в моем первом сообщении:
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:maxLevel="1" android:drawable="@drawable/wave11"/>
    <item android:maxLevel="2" android:drawable="@drawable/wave12"/>
    <item android:maxLevel="3" android:drawable="@drawable/wave13"/>
    <item android:maxLevel="4" android:drawable="@drawable/wave14"/>
</level-list>
wave2:
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:maxLevel="1" android:drawable="@drawable/wave21"/>
    <item android:maxLevel="2" android:drawable="@drawable/wave22"/>
    <item android:maxLevel="3" android:drawable="@drawable/wave23"/>
    <item android:maxLevel="4" android:drawable="@drawable/wave24"/>
</level-list>
И так далее по аналогии. Картинок (wave11, wave12, ... , wave21, ... , wave31, ... , wave54) в сумме 20 штук, но, как я уже говорил, их суммарный вес не превышает 200 кб
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 19:19     Grow heap (frag case) to 54 MB #4
У Android'а есть очень интересное свойство. Если изображения хранятся только в каталоге drawable, то он считает их как drawable-mdpi и для бОльших экранов пропорционально увеличивает их в размере, тем самым занимая память в разы больше, чем изначально весили эти изображения.
Для таких случаев используют каталог drawable-nohdpi вместо обычного drawable. Работают они аналогично, только первый использует изображения "как есть", не позволяя их масштабировать системе.
niki2012
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 15
30.07.2013, 19:33  [ТС]     Grow heap (frag case) to 54 MB #5
Спасибо, используемая память уменьшилась до 14 мб, но для больших экранов немасштабируемость не подойдет...
А не подскажете, при использовании level-list'a в ОЗУ хранятся сразу все изображения, указанные в xml-файле? Если да, то поможет ли программная установка картинки напрямую в ImageView без level-list через какой-нибудь switch case?
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 19:41     Grow heap (frag case) to 54 MB #6
Цитата Сообщение от niki2012 Посмотреть сообщение
в ОЗУ хранятся сразу все изображения, указанные в xml-файле?
Да
Цитата Сообщение от niki2012 Посмотреть сообщение
поможет ли программная установка картинки напрямую в ImageView без level-list через какой-нибудь switch case?
Думаю да, если использовать только один ImageView. Но точно не скажу, не обращал внимания на память в таких случаях.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 19:53     Grow heap (frag case) to 54 MB
Еще ссылки по теме:
C++ в case 7 - нужно сделать поиск по номеру группы, а в case 6 сортировку по имени
При выборе case 1 всегда черный экран? как правильно указать путь в case C++
VBA Ошибки при работе с ComboBox (Case without Select Case)
Как сделать case WM_TIMER в case WM_LBUTTONDOWN C++ WinAPI
C# Объединение case в условии swtich case

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
niki2012
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 15
30.07.2013, 19:53  [ТС]     Grow heap (frag case) to 54 MB #7
Спасибо за помощь, буду пробовать
Yandex
Объявления
30.07.2013, 19:53     Grow heap (frag case) to 54 MB
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru