Как получить уведомление applicationWillTerminate для приложения iOS с включенным фоновым режимом?

Итак, я знаю, что applicationWillTerminate: не будет вызываться, если ваше приложение поддерживает фоновое выполнение (если нет проблем с памятью), а вместо этого вызывается applicationDidEnterBackground:.

Внутри метода applicationDidEnterBackground: в appDelegate он говорит

// If your application supports background execution, 
//this method is called instead of applicationWillTerminate: when the user quits.

Однако мне нужно сохранить некоторые записи в словаре, когда пользователь действительно выходит из приложения. Я не хочу делать это каждый раз, когда приложение переходит в фоновый режим. Есть ли способ получить уведомление о завершении, даже если мое приложение поддерживает фоновый режим?

В частности, если приложение принудительно закрыто пользователем, каков обходной путь, чтобы получить уведомление об этом?


person Tommy Devoy    schedule 02.01.2013    source источник
comment
Пользователь никогда не закрывает приложение, поддерживающее фоновое выполнение. Приложение просто переходит в фоновый режим. Приложение может быть остановлено операционной системой в фоновом режиме, но это не действие пользователя. Почему вы не хотите сохранять данные каждый раз, когда приложение переходит в фоновый режим? Это ваш единственный вариант.   -  person rmaddy    schedule 03.01.2013
comment
Это приложение, которое взаимодействует с внешним устройством Bluetooth. Если пользователь принудительно убивает приложение, у меня сложилось впечатление, что оно больше не работает в фоновом режиме. Разве это не так?   -  person Tommy Devoy    schedule 03.01.2013
comment
Это правда. Если пользователь принудительно убивает приложение, то ваше приложение не получает никакого уведомления о том, что его убивают.   -  person rmaddy    schedule 03.01.2013
comment
@maddy EDIT: нм, ты ответил на мое беспокойство. Я подчеркивал проблему принудительного выхода   -  person Bergasms    schedule 03.01.2013
comment
@rmaddy я не уверен, что это правильно, по крайней мере, больше. Я использую фоновые местоположения, они нормально работают в фоновом режиме (смотрите это в консоли)... затем я использую переключатель приложений, чтобы убить его... и я все равно получаю уведомление applicationWillTerminate:.   -  person Gukki5    schedule 27.07.2017
comment
@Gukki5, пожалуйста, ознакомьтесь с документацией по applicationWillTerminate для получения последней информации. На данный момент он не вызывается, если приложение приостановлено в фоновом режиме.   -  person rmaddy    schedule 27.07.2017
comment
@rmaddy правильно, не для отстранения. Я имел в виду, если вы живете в фоновом режиме, а не в подвешенном состоянии.   -  person Gukki5    schedule 28.07.2017


Ответы (1)


сохранять каждый раз, когда приложение входит в БГ. ОС может ТОГДА убить вас без каких-либо дополнительных предупреждений.

person Daij-Djan    schedule 04.01.2013
comment
вот моя ситуация: приложение подключается к внешним устройствам Bluetooth. Если приложение будет уничтожено, соединение Bluetooth будет отключено, и мне нужно сохранить этот факт для пользовательского интерфейса, когда приложение возобновит работу. Однако, если приложение просто работает в фоновом режиме, соединение Bluetooth остается, и мне не нужно ничего сохранять. Есть ли у вас какие-либо идеи о том, как решить эту проблему? - person Tommy Devoy; 05.01.2013
comment
разве ты не видишь, все еще работает или нет, когда приложение возобновляет работу? например что-то вроде if(connection.isValid)... еще... - person Daij-Djan; 05.01.2013
comment
повторное подключение после возобновления работы приложения занимает несколько секунд. Поэтому в основном мне нужно, чтобы пользовательский интерфейс обновлялся до этого факта, но я не хочу обновлять пользовательский интерфейс, когда он просто переходит в фоновый режим (только когда он завершается). - person Tommy Devoy; 05.01.2013