ApplicationWillTerminate в iOS 4.0
Метод делегирования applicationWillTerminate не вызывается в iOS 4.0
Когда я нажимаю кнопку "Домой", я вижу, как вызываются методы делегирования applicationWillResignActive и applicationDidEnterBackground.
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"Application Did Resign Active");
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Application Did Enter Background");
}
И когда я дважды нажимаю кнопку "Домой" и снова запускаю приложение, я нахожу, что вызывающие методы applicationWillEnterForeground и applicationDidBecomeActive получаются.
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"Application Will Enter Foreground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"Application Did Become Active");
}
Но я хочу знать, когда будет вызван метод applicationWillTerminate delegate, где я выполняю некоторые процедуры резервного копирования DB/файлов.
- (void)applicationWillTerminate:(UIApplication *)application{
}
Я даже попытался нажать знак минус и удалил приложение, запущенное в фоновом режиме, но все же он не вызывал никакого метода делегата.
Любые идеи???
Ответы
Ответ 1
Из руководства по программированию приложений iPhone:
Даже если вы разрабатываете приложение с помощью iPhone SDK 4 и более поздних версий, вы все равно должны быть готовы к тому, что ваше приложение будет прекращено. Если память будет ограничена, система может удалить приложения из памяти, чтобы сделать больше места. Если ваше приложение в настоящее время приостановлено, система удаляет ваше приложение из памяти без какого-либо уведомления. Однако, если ваше приложение в настоящее время работает в фоновом режиме, система вызывает метод applicationWillTerminate:
делегата приложения. Ваше приложение не может запросить дополнительное время выполнения фона из этого метода.
Итак, applicationWillTerminate:
обычно не будет вызываться очень часто в iOS 4. Если вам нужно сохранить данные, вы должны сделать это как в applicationWillTerminate:
, так и в applicationDidEnterBackground:
.
Ответ 2
Сессия WWDC 2010 Принятие многозадачности на iPhone OS (Часть 2) объясняет, что состояние состояния приложения очень хорошо.
Ответ 3
У меня есть одно решение для завершения приложений, когда пользователь нажимает кнопку "Главная" в iOS4.
Это вызовет метод applicationWillTerminate delegate вместо входа в фоновый процесс.
- Откройте файл info.plist
- Добавить ключ UIApplicationExitsOnSuspend
- Установите новый ключ в YES
Ответ 4
На самом деле вы также можете использовать этот шаг для этого.
- Откройте файл info.plist
- Добавить ключ → Приложение не работает в фоновом режиме
- Задайте значение этой клавиши YES