Я реализую приложение, которое требует много больших изображений, с масштабированием, подкачкой страниц, используя viewPager и все такое.
Использование всего изображения не вариант, потому что это даст исключение OutOfMemory,поэтому я внедряю собственную систему листов.У меня уже есть изображение, разрезанное на несколько частей на SD-карте, и 3 его варианта, низкого, среднего и высокого качества.
Идея состоит в том, чтобы загрузить нужные плитки в зависимости от масштаба.
Все прекрасно в теории, и эта система уже хорошо работает в нашем приложении для iOS, но в Android она становится невыносимо медленной из-за сборщика мусора.
Почему-то кажется, что сборщику мусора требуется слишком много времени, чтобы освободить память растровых изображений, и мое приложение пытается создать новые растровые изображения, прежде чем GC очистит те, которые я просил его очистить, поэтому, еслислишком быстрое разбиение на страницы пользователя, память будет расти, и в какой-то момент все приложение станет медленным, и в конечном итоге оно будет зависать в OOM.
Каждый раз, когда пользователь переходит на следующую страницу, я вызываю следующее на старойрастровые изображения:
lowResBitmap.recycle ();lowResBitmap = null;
Есть ли лучший способ обрабатывать размещение и освобождение растрового изображения на Android?
РЕДАКТИРОВАТЬ: я забываю вызывать .recycle () для некоторых растровых изображений, теперь он не падаетв OOM больше, но он очень медленный (по сравнению с нашим приложением для iOS), потому что каждый раз, когда пользователь переворачивает страницу, Android многократно вызывает GC, и это замедляет мой поток рисования.