Пользователь принудительно завершает работу приложения: регистрация этого события

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

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

Возможно ли это в моем случае?


person freshking    schedule 10.09.2014    source источник


Ответы (2)


Метод -applicationWillTerminate: вызывается, когда система «хорошо» завершает приложение упорядоченным образом (т. е. оно не находится в фоновом режиме для ожидающих выполнения задач или сообщило ОС, что эти задачи завершены). Это явно отличается от "пользователь принудительно закрыл приложение", и в этом случае ваше приложение не получит никаких сообщений, потому что оно только что было запущено пулей в голову.

Вы уверены, что правильно/полностью участвуете в фоновых службах? То есть вы уверены, что правильно сообщаете системе, что закончили? Вы должны отредактировать свой вопрос и опубликовать соответствующий фоновый код. Например, если вы используете -beginBackgroundTaskWithExpirationHandler:, в документах говорится:

Если вы не вызываете endBackgroundTask: для каждой задачи до истечения времени, система убивает приложение.

... может это ваша проблема?

person Joshua Nozzi    schedule 10.09.2014
comment
Фоновые службы работают нормально. Приложение без проблем собирает данные о местоположении. Причина, по которой мне нужно знать, переведено ли приложение в фоновый режим или завершено, заключается в том, что при переводе в фоновый режим приложение регистрирует локальное уведомление. Я не хочу, чтобы это произошло, когда приложение закрывается. - person freshking; 10.09.2014
comment
Извините, я думаю, что у меня проблемы с получением того, что вы просите. Нет никакого эффективного различия между вашим приложением, которое находится в фоновом режиме или закрыто пользователем; если это не активное приложение, считайте, что оно прекращено/переведено в фоновый режим по какой-либо причине. Для служб определения местоположения это поведение определяется здесь: developer.apple.com/library/ios/documentation/userexperience/ Не могли бы вы уточнить, чего именно вы пытаетесь достичь? - person Joshua Nozzi; 10.09.2014

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

Я знаю, что это подразумевает некоторую обработку на сервере.

Надеюсь это поможет.

person Eva Madrazo    schedule 11.09.2014