Следует ли избегать пользовательского интерфейса при запуске приложения 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, и вы хотите, чтобы пользователи видели новые электронные письма / сообщения.
  • неэффективно, потому что вы просто делаете что-то, что потребляет батарею слишком рано. Вы даже сказали "тяжелая загрузка пользовательского интерфейса". Что произойдет, если местоположение меняется снова и снова и снова? Могут ли изменения быть отменены в том смысле, что они больше не нужны, или вам всегда понадобятся эти изменения, независимо от них.

Подводя итог: я не говорю, что не делайте никаких обновлений пользовательского интерфейса, у каждого приложения есть приятное место. Вероятно, вам не нужно будет выполнять большинство из них, и ленивая загрузка изменений, т. Е. При загрузке экрана, кажется, лучший способ. Хотя я уверен, что есть некоторые продвинутые рекомендации, о которых я не знаю. Надеюсь, другие ответы придут.

Другие вопросы по тегам