ViewPager: размер растрового изображения превышает бюджет виртуальной машины - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть приложение, в котором я использую ViewPager и устанавливаю на каждой странице «Фрагмент» изображение.

Когда я прокручиваю пейджер просмотра после изображения 25, оно выдает мне нехватку памяти, но я удаляю изображениекаждый раз переходите на следующую страницу.

проверьте код ниже:

public void destroyItem(View collection, int position, Object view) {
    Log.d("**", "remove image");
    ((ViewPager) collection).removeView((ImageView) view);
} //method: remove item from pager adapter

Я попробовал код отсюда, чтобы удалить ImageView, но это не решило проблему:

  private void unbindDrawables(View view) {
     if (view.getBackground() != null) {
          view.getBackground().setCallback(null);
     }
     if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
           unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
      }
}

edit:
приведенный ниже код решит проблему, но я хочу использовать полный размер изображения и почему оно не удаляет изображение?

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; //reduce image size

1 Ответ

1 голос
/ 20 ноября 2011

Возможны две проблемы:

  1. Ваши изображения слишком велики
  2. Возможно, ГХ работает не так быстро, как должен.Если вы используете растровые изображения, вы должны позвонить recycle() после удаления их из представлений.Это гарантирует, что GC может восстановить память.Будьте осторожны, если эти растровые изображения повторно используются в любом из других представлений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...