iOS4: событие завершения приложения?


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

ApplicationWillTerminate

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

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

Если вы знаете более простой способ достичь этого, я был бы рад услышать :)

Спасибо

4 3

4 ответа:

Ангел, то, о чем ты просишь, не может быть сделано. Приложение будет прекращено с помощью SIGKILL. Неудержимый, не уловимый, никаких уведомлений. Нет никакой разницы между инициированным системой завершением или завершением, запрошенным пользователем.

Вы получите applicationWillTerminate только в том случае, если ваше приложение не поддерживает фоновую обработку.

Зарегистрируйте свой объект (контроллер вида и т. д.) прислушаться к тому, что UIApplicationWillTerminateNotification уведомление и / или переопределение делегата приложения -applicationWillTerminate: метод и поместите туда свой код.

Из документов UIApplicationDelegate по этому вопросу:

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

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

Я думаю, это зависит от того, что вы определяете как "быть на заднем плане".

IIRC это звучит так:

На старте:

  • didFinishLaunchingWithOptions
  • applicationDidBecomeActive

Нажатие home:

  • applicationWillResignActive
  • applicationDidEnterBackground

Возвращаясь с главного экрана:

  • applicationWillEnterForeground
  • applicationDidBecomeActive

applicationWillTerminate вызывается, когда ваше приложение завершает работу из-за вызова или ОС убивает его по какой-либо причине.