Я создал игру сверху вниз, в которой ваш персонаж перемещается по уровню. Уровень - это, по сути, 1600x2400 png. Я не могу загрузить этот png в память, поэтому мне нужно использовать BitmapRegionDecoder, чтобы загрузить его в куски, когда игрок перемещается по уровню. Конечно, это отстой и, возможно, приводит к заиканию. Я думал о загрузке следующего фрагмента в фоновом потоке, но это означало, что у меня было два куска в памяти: текущий и следующий, что привело бы к исключению OutOfMemoryException.
Теперь у всех устройств есть как минимум 512 МБ или ОЗУ, так почему у нас все еще есть этот глупый лимит на vm ram? Это деспотичный Google, чтобы рассказать нам, сколько бара мы должны использовать! Давайте решать! Теперь я должен есть намного больше циклов процессора только потому, что не могу загрузить все это в ОЗУ, не говоря уже о худшей производительности, которую я получаю с этим BitmapRegionDecoder!
Любые идеи, почему Google делает это и когда это закончится? Каков логический аргумент в пользу этого решения?
a) ОЗУ 512 МБ не означает, что ваше приложение может использовать это. Свободная память по-прежнему довольно ограничена. Поэтому я думаю, что это никогда не закончится. Количество, которое получит VM, вероятно, увеличится, но если вы хотите оставаться совместимым, тогда вам нужно эффективно кодировать код. (например, разделить изображения и не загружать данные с гигантского изображения)
b) Вы можете использовать JNI/NDK/C и управлять памятью самостоятельно, нет ограничений для собственного кода.