Должна ли моя игра для iOS вообще освобождать память, когда она переходит в фоновый режим?

#memory #ios7 #process #background

#память #ios7 #процесс #фон

Вопрос:

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

Столкновение кланов.Кажется, что она вообще не освобождает память, когда переходит в фоновый режим, на самом деле я могу открывать легкие приложения, такие как Notes, и возвращаться к игре, чтобы продолжить игру без какой-либо заметной задержки, что кажется мне довольно крутым с точки зрения пользователя.

Игра войны.Игра немедленно возвращается к экрану загрузки, и процесс инициализации начинается заново, когда он запускается сразу после перехода в фоновый режим, это похоже на перезапуск игры, что иногда очень раздражает.

Итак, в случае моей игры ее средний объем памяти составляет 25 МБ (и при некоторой оптимизации он будет меньше), я знаю, что рекомендуется «Освободить как можно больше памяти», чтобы быть хорошим соседом на платформе iOS, но, учитывая, чтоосвобождение памяти при переходе в фоновый режим может привести к «раздражающей» паузе в моей игре при переходе в режим переднего плана…

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

Ответ №1:

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

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

Например, одним из вариантов использования, как вы упомянули, может быть «пользователь может переключиться на легкое приложение и вернуться к игре без ненужных ожиданий». (UC1) Затем у вас также должен быть список легких приложений и справочных устройств, для которых вы хотите убедиться, что вариант использования действительно удовлетворен.

С другой стороны, вы можете захотеть поддержать несколько иной вариант использования: «пользователь всегда будет возвращаться к тому месту, где он покинул игру, если приложение не было завершено, и в этом случае приложение должно отображать главное меню». (UC2)

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

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

И, конечно, не имеет смысла использовать первый вариант использования (UC1), если объем памяти вашего приложения настолько велик, что он будет завершен почти сразу после переключения на другое приложение на большинстве устройств. В таком случае, возможно, имеет смысл освободить память, чтобы вы, по крайней мере, могли сэкономить время загрузки приложения (по сравнению с временем загрузки ресурсов), когда вернетесь к нему.

Итак, в конце концов, это зависит…

Ответ №2:

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

например, кто-то хочет отправить сообщение кому-то в середине игры. Они выходят из игры и кому-то пишут. Но затем им приходится загружать игру снова. Это никому не нравится.

Ответ №3:

Хотя ваша игра не занимает много памяти, большинство пользователей не утруждают себя закрытием приложений. Я бы рекомендовал освободить как можно больше памяти, не отправляя их обратно в меню «Пуск», как рекомендовал @sergio с его опцией «промежуточный».

Ответ №4:

Я настоятельно рекомендую освободить память. У меня iPhone 4, и некоторые приложения теперь занимают слишком много постоянной памяти, так что переключение между ними становится кошмаром. Например. недавно я больше не мог переключаться между Safari и Twitter, без перезагрузки всего их состояния (занимает более 20 секунд в обоих направлениях).

Итог: постарайтесь сохранить важное состояние, но с как можно меньшим объемом памяти (т. Е. Без Сохранения изображений / текстур), Иначе приложение закроется на старых устройствах, и вы фактически потеряете больше состояния.

Комментарии:

1. Я согласен с вами, но только если приложение не является игрой, игры — это особый случай, который требует специальных рекомендаций или, по крайней мере, заслуживает рассмотрения в зависимости от игры.

Ответ №5:

Сохраните прогресс и освободите память во время паузы загрузки, особенно если ваша игра предназначена для старых устройств. У меня iPhone 4, и когда игра работает в фоновом режиме без освобождения памяти, мои приложения переднего плана выходят из строя каждые 15 минут. Но если у вас есть такие вещи, как «Обновление транспортного средства / оружия выполняется за x минут», вам нужно будет сохранить ход игры и освободить память, поэтому работает только таймер обновления. Если вы сделаете достаточно оптимизаций, вы можете уменьшить объем памяти, поэтому я бы рекомендовал вам помнить об оптимизации при написании кода, и тогда фоновая производительность будет вашей наименьшей проблемой.