/ / Android: сміттєзбірник не працює для Bitmap - android, виняток, растровий малюнок, сміття

Android: збирач сміття не працює для Bitmap - андроїд, виняток, растровий малюнок, сміття

У мене є ViewPager з парою фрагментів. У фрагменті onCreateView,

Я декодую пару растрових зображень, які призначаються полям класу Fragment. Якщо я спробую провести пальцем між фрагментами, у певний момент додаток отримує OutOfMemory виняток (heap is exhausted).

Гаразд, це дійсно погана практика, але хіба що GC повинен звільнити пам'ять до мого вбивства?

Перепризначення Bitmap у тому ж полі повинно спричинити звільнення попередньої Bitmap, я помиляюся? На S4 я отримую виняток дуже скоро.

Відповіді:

1 для відповіді № 1

Припустимо, ви завантажуєте растрову карту, скажімо, що цеперший, а потім призначте нову декодовану другу растрову карту першій, перша растрова карта не є GC "ed, коли ви розшифруєте другу. GC буде робити це пізніше, коли вирішить. Якщо ви хочете звільнити пам'ять як можна швидше, вам слід зателефонувати recycle () безпосередньо перед розшифровкою другого растрового зображення. Src: тут. І перейдіть через Android "s Керування бітовою пам'яттю стаття. Зверніться це теж


0 для відповіді № 2

Фрагменти зберігаються в пам’яті, якщо не вказано інше, тож ви вручну від'єднуєте та утилізуєте фрагменти під час перенесення або mBitmap.recycle () під час перенесення.

Редагувати, код:

     final FragmentTransaction fm = getActivity()
.getSupportFragmentManager().beginTransaction();
fm.replace(R.id.fragPlayerMain, playerFragment, "fragment").addToBackStack(null);
fm.hide(thisFrag);
fm.detach(thisFrag);
fm.commitAllowingStateLoss();