У меня есть приложение, которое интенсивно использует растровые изображения, считанные с SD-карты. Я на 99% уверен, что мое приложение никогда не будет уничтожено без их переработки. все они размещены в кеше LRU (commons-collection), который перерабатывает их при удалении из кеша LRU, а остальные я перерабатываю в onDestroy ().
тем не менее, у меня все еще есть проблемы. если я запускаю / останавливаю / запускаю ... мое приложение несколько раз, я всегда получаю сообщение об ошибке памяти.
Моя теория заключается в том, что она должна делать некомпактную кучу с android. после нескольких запусков куча достаточно фрагментируется, поэтому, несмотря на наличие достаточного количества свободной памяти, нет непрерывных кусков, достаточно больших для загрузки растровых изображений. это теория в любом случае.
Я «решаю» это, убивая мой процесс в onDestroy () (android.os.Process.killProcess ()). это решает проблему, но вводит другие собственные проблемы, так как у меня есть другие потоки и службы, которые необходимо завершить, и ожидание всех этих проблем нецелесообразно. не говоря уже о том, что я, конечно, понимаю, что это очень плохая практика.
Я прочитал все посты и т. Д. По этой теме и не вижу хорошего решения. Я использую Thumbnails.getThumbnail (), поэтому я уже использую уменьшенные версии изображений. дальнейшая их выборка приводит к очень низкому качеству изображения.
Я храню кэш из 8 "мини" миниатюр и 36 "микро" миниатюр, так что у меня никогда не бывает больше, чем в памяти одновременно. все они должны умещаться в несколько мегабайтов самое большее.
любые идеи / советы / указатели приветствуются. я на этом в своем уме.