Следует ли избегать пользовательского интерфейса при запуске приложения iOS в фоновом режиме
Мое приложение поддерживает фоновые обновления местоположения (особенно при значительном мониторинге местоположения).
Нужно ли предотвращать загрузку пользовательского интерфейса (через контроллеры и т. Д.), Когда я определяю, что приложение находится в фоновом режиме (application.applicationState == UIApplicationStateBackground
)?
Мое намерение состоит в том, чтобы избежать интенсивной загрузки пользовательского интерфейса (это БОЛЬШОЕ приложение) в фоновом режиме, что может потратить все ограниченное время, которое у меня есть в фоновом режиме, чтобы фактически отреагировать на обновление местоположения.
Например (в ObjC, но вопрос также для Swift), скажем, у меня есть некоторые RootViewController
который инициализирует и содержит всю иерархию контроллеров / представлений, если я viewDidLoad
делать:
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
// Root view controller loaded while in background, so doing only background stuff
[self justDoBackgroundStuffWithoutUI];
} else {
// Root view controller loaded normally, so loading normal UI
[self initializeUIAndChildControllers];
}
? Или я должен просто "доверять" iOS, чтобы игнорировать все эти задачи пользовательского интерфейса, потому что он будет знать, что он находится в фоновом состоянии?
2 ответа
Вы можете игнорировать их и позволить ОС справиться с этим, просто будьте осторожны, если у вас долго выполняются задачи BG, они могут или не могут успеть завершиться, поэтому лучше быть очень осторожным, поскольку они не позволят вам выполнять задачи вечно.
Обновление пользовательского интерфейса в фоновом режиме не требуется, сбивает с толку и неэффективно.
- не нужно, потому что нет никакой пользы для пользователя, который не использует приложение. Простого действия в viewWillAppear будет достаточно.
- сбивает с толку, потому что пользователи, возможно, ожидают увидеть изменения сами при появлении экрана, я не знаю вашего приложения, но это скорее бизнес-выбор. Возможно, у вас есть что-то похожее в способе отображения изменений, таких как gmail / whatsapp, и вы хотите, чтобы пользователи видели новые электронные письма / сообщения.
- неэффективно, потому что вы просто делаете что-то, что потребляет батарею слишком рано. Вы даже сказали "тяжелая загрузка пользовательского интерфейса". Что произойдет, если местоположение меняется снова и снова и снова? Могут ли изменения быть отменены в том смысле, что они больше не нужны, или вам всегда понадобятся эти изменения, независимо от них.
Подводя итог: я не говорю, что не делайте никаких обновлений пользовательского интерфейса, у каждого приложения есть приятное место. Вероятно, вам не нужно будет выполнять большинство из них, и ленивая загрузка изменений, т. Е. При загрузке экрана, кажется, лучший способ. Хотя я уверен, что есть некоторые продвинутые рекомендации, о которых я не знаю. Надеюсь, другие ответы придут.