Различия между applicationDidEnterBackground и applicationWillTermimate

В моем приложении, когда пользователь нажимает кнопку «Домой», я сохраняю данные в NSUserDefaults. Приложение работает в фоновом режиме. Когда пользователь повторно запускает приложение, я использую метод applicationWillEnterForeground для отображения сохраненных данных.

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

Итак, как я могу отличить, что приложение просто свернуто или оно закрыто?


person Prerna chavan    schedule 07.05.2012    source источник
comment
Вы можете использовать applicationDidEnterBackground, после нажатия кнопки «Домой» этот метод всегда вызывается.   -  person rishi    schedule 07.05.2012
comment
@rishi Кажется, что реальный вопрос в сообщении заключается в том, почему applicationWillTerminate иногда не вызывается при завершении работы приложения ...   -  person Hailei    schedule 07.05.2012
comment
Да, но как я могу узнать, что приложение просто свернуто или закрыто? Я хочу, чтобы для этих двух разных условий были сохранены разные данные.   -  person Prerna chavan    schedule 07.05.2012


Ответы (6)


Каждый раз, когда пользователь нажимает только один раз, и приложение переходит в фоновый режим, всегда вызывается applicationDidEnterBackground. В этом методе вы можете временно обновить / сохранить значение NSUserDefaults.

Если в этом случае приложение снова перейдет на передний план без завершения двойным касанием, вызовет applicationDidBecomeActive, в котором вы снова можете обновить / удалить временно сохраненное значение NSUserDefaults. И если пользователь выходит из приложения двойным нажатием, сохраненное значение будет сохранено в NSUserDefaults.

person alloc_iNit    schedule 07.05.2012

О различиях между UIApplicationDelegate методами см. Справочник по протоколу UIApplicationDelegate. applicationDidEnterBackground: всегда будет вызываться при нажатии кнопки «Домой». Но похоже, что applicationWillTerminate: вызвать не гарантировано.

Если ваше приложение не работает на переднем плане, оно может быть либо в фоновом режиме, либо в приостановленном режиме. См. Раздел «Цикл запуска приложения» в Руководство по программированию приложений для iOS - состояния приложений и многозадачность.

Когда приложение работает в фоновом режиме и отслеживает события, applicationWillTerminate: будет вызываться после его завершения. Когда приложение приостановлено, этого не произойдет. См. Описание в разделе «Прекращение действия приложения»:

Даже если вы разрабатываете свое приложение с использованием iOS SDK 4 и более поздних версий, вы все равно должны быть готовы к тому, что ваше приложение будет убито без какого-либо уведомления. Пользователь может убивать приложения явно, используя интерфейс многозадачности. Кроме того, если объем памяти становится ограниченным, система может удалить приложения из памяти, чтобы освободить место. Приостановленные приложения не уведомляются о завершении, но если ваше приложение в настоящее время работает в фоновом состоянии (а не приостановлено), система вызывает applicationWillTerminate: метод делегата вашего приложения. Ваше приложение не может запрашивать дополнительное время фонового выполнения из этого метода.

person Hailei    schedule 07.05.2012

applicationDidEnterBackground - всякий раз, когда пользователь нажимает кнопку домой, приложение переходит в фоновый режим, в это время он вызывает метод applicationDidEnterBackground. Он вызывается всякий раз, когда пользователь минимизирует приложение, нажав кнопку «Домой» или переключившись на другое приложение.

applicationWillTerminate - он вызывается только тогда, когда процесс приложения фактически прекращается. То есть пользователь убивает его, используя красную кнопку «минус» в переключателе задач, или сама система убивает его, находясь в фоновом режиме (например, при нехватке памяти). Ваше приложение не может запрашивать дополнительное время фонового выполнения у этого метода.

person Chetan Bhalara    schedule 07.05.2012

applicationDidEnterBackground - этот метод будет вызываться, когда пользователь устанавливает приложение в фоновый режим, нажав кнопку «Домой».

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

person iOSDev    schedule 07.05.2012

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

Если есть данные, которые вам нужно сохранить, вы должны сделать это, когда приложение перейдет в фоновый режим.

person Nitin    schedule 07.05.2012

applicationWillTerminate вызывается только тогда, когда процесс приложения фактически прекращается. То есть пользователь убивает его, используя красную кнопку «минус» в переключателе задач, или сама система убивает его, находясь в фоновом режиме (например, при нехватке памяти).

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

person Community    schedule 07.05.2012