Различать applicationDidEnterBackground и applicationWillTermimate

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

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

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

6 ответов


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

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


о разнице между UIApplicationDelegate методы, пожалуйста, обратитесь к Ссылка На Протокол UIApplicationDelegate. applicationDidEnterBackground: всегда будет вызываться при нажатии кнопки "Home". Но кажется, что applicationWillTerminate: не гарантируется вызов.

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

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

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


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

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


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

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


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

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


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

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