нехватка памяти при работе с большими растровыми изображениями и жизненным циклом активности Android - PullRequest
5 голосов
/ 24 июля 2010

У меня есть приложение с прокручиваемой картой, которое пока имеет огромное растровое изображение.Он загружается нормально при запуске, но когда он теряет статус переднего плана и пользователь возвращает его обратно, я получаю ошибку нехватки памяти.В onPause он удаляет растровое изображение с помощью recycle и помечает его как ноль.OnResume проверяет, имеет ли map == значение null, и снова загружает растровое изображение, что приводит к сбою программы, несмотря на то, что я перерабатываю растровое изображение ...Все остальные ссылки на растровую карту сначала проверяют, является ли она пустой до загрузки / отрисовки.

onPause

protected void onPause() {
super.onPause();
Log.e("sys","onPause was called");
if (map != null)
{
        map.recycle();
        map = null;
        System.gc();
        Log.e("sys","trashed the map");
}
}

my onResume

protected void onResume(){
super.onResume();
Log.e("sys","onResume was called");

if (map == null)
        map = BitmapFactory.decodeResource(getResources(),
                        R.drawable.lowresbusmap);
Log.e("sys","redrew the map");
}

1 Ответ

0 голосов
/ 24 июля 2010

Попробуйте так:

protected void onResume(){
    super.onResume();
    if (map == null){
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inTempStorage = new byte[16*1024];

        map = BitmapFactory.decodeResource(getResources(),
                        R.drawable.lowresbusmap, options);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...