Часть моего приложения включает в себя преобразование страниц PDF-файла в растровые изображения, а возможно, и десятков или сотен страниц. Поскольку размер растрового изображения размером около 16 МБ, я добавляю буфер, чтобы загружать только определенное количество страниц вокруг отображаемой в данный момент страницы, чтобы предотвратить любые ошибки OOM.
Теперь я нахожусь на той стадии, когда мое приложение достаточно стабильно, и я мог бы вернуться и иметь более надежное решение, динамически определяющее этот буфер на основе доступной памяти. Сначала я думал, что смогу это сделать во время выполнения:
Код: Выделить всё
val runtime = Runtime.getRuntime()
val availableHeap = runtime.maxMemory() - (runtime.totalMemory() - runtime.freeMemory())
Однако все эти числа оставались фактически постоянными (+/- мегабайт), даже когда я загружал сотни мегабайт растровых изображений. Другой вариант, о котором я читал, - это Debug.getNativeHeapAllocatedSize() и соответствующий getNativeHeapFreeSize(), и хотя выделенный размер собственной кучи увеличивался вместе с растровыми изображениями, свободный размер оставался постоянным.
Насколько я могу судить, остается только ActivityManager.MemoryInfo.totalMem и ограничиваюсь некоторой произвольной частью этого значения. Это решение работает, и все было бы хорошо, но я чувствую, что должен быть лучший вариант для определения жесткого ограничения объема памяти, выделяемой моему приложению.