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

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

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

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

2 ответа

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

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

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

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

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

Это подразумевает некоторую обработку на сервере, я знаю.

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

Другие вопросы по тегам