Задать вопрос
kivsiak
@kivsiak
software engineer

Частый VMDebug.startGC() при создании bitmap?

Мое приложение активно создает Bitmap из bytearray или встроенных ресурсов.

После тестов на разных девайсах обнаружил что производительность в разы различается на Lenovo IconTab и Samsung sgs3 или Tab 10.1


После запуска профилировщика с удивлением обнаружил что время вызова Bitmap.nativeCreate() различается в разы если на леново оно он находися глубоко внизу то на самсунгах на 3 месте. Более того 97% процессорного времени внутри него занимает VMDebug.startGC() которому в теории полагается быть фейковым. На леново я этого метода не вижу.


Пробовал запускать из Android Studio в дебаг и обычном режиме. Делал релизные сборки и заливал их руками. Все равно производительность одинаково ужасная.


Есть идеи куда тут можно копать и что смотреть?
  • Вопрос задан
  • 3132 просмотра
Подписаться 4 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@Evgenij_Popovich
1. Зачем декодировать сразу все 100 картинок и держать их в памяти, а не по мере появления их на экране?
2. Используйте опции декодирования, чтобы картинки не резервировали память на долго

final BitmapFactory.Options options = new BitmapFactory.Options();
 
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
 
// #302 added to reduce amount of OutOfMemory errors
options.inDither = false; // Disable Dithering mode
options.inPurgeable = true; // Tell to gc that whether it needs
                            // free memory, the Bitmap can be
                            // cleared
options.inInputShareable = true; // Which kind of reference will
                                 // be used to recover the Bitmap
                                 // data after being clear, when
                                 // it will be used in the future
options.inTempStorage = new byte[32 * 1024];


3. Потребляемую память можно посмотреть на вкладке Heap view. На Ваших скринах этого не видно
Ответ написан
@Evgenij_Popovich
промазал
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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