растровые изображения Android, утилизация и фрагментация кучи - PullRequest
4 голосов
/ 15 июня 2011

У меня есть приложение, которое интенсивно использует растровые изображения, считанные с SD-карты. Я на 99% уверен, что мое приложение никогда не будет уничтожено без их переработки. все они размещены в кеше LRU (commons-collection), который перерабатывает их при удалении из кеша LRU, а остальные я перерабатываю в onDestroy ().

тем не менее, у меня все еще есть проблемы. если я запускаю / останавливаю / запускаю ... мое приложение несколько раз, я всегда получаю сообщение об ошибке памяти.

Моя теория заключается в том, что она должна делать некомпактную кучу с android. после нескольких запусков куча достаточно фрагментируется, поэтому, несмотря на наличие достаточного количества свободной памяти, нет непрерывных кусков, достаточно больших для загрузки растровых изображений. это теория в любом случае.

Я «решаю» это, убивая мой процесс в onDestroy () (android.os.Process.killProcess ()). это решает проблему, но вводит другие собственные проблемы, так как у меня есть другие потоки и службы, которые необходимо завершить, и ожидание всех этих проблем нецелесообразно. не говоря уже о том, что я, конечно, понимаю, что это очень плохая практика.

Я прочитал все посты и т. Д. По этой теме и не вижу хорошего решения. Я использую Thumbnails.getThumbnail (), поэтому я уже использую уменьшенные версии изображений. дальнейшая их выборка приводит к очень низкому качеству изображения.

Я храню кэш из 8 "мини" миниатюр и 36 "микро" миниатюр, так что у меня никогда не бывает больше, чем в памяти одновременно. все они должны умещаться в несколько мегабайтов самое большее.

любые идеи / советы / указатели приветствуются. я на этом в своем уме.

1 Ответ

2 голосов
/ 15 июня 2011

Вы говорите, что перерабатываете их в onDestroy(), но, возможно, вам следует перерабатывать их в onPause()?Я столкнулся с некоторыми проблемами с нехваткой памяти при переключении ориентации, и проблема была решена путем выполнения утилизации в onPause().

Просто мысль.Не уверен, что это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...