IOS, как определить, когда приложение было удалено из процесса
Что такое метод делегата для обнаружения при закрытии приложения.
Я имею в виду, когда пользователь нажимает эту кнопку:
![enter image description here]()
Я знаю о методе ниже:
- (void)applicationDidEnterBackground:(UIApplication *)application;
- (void)applicationWillEnterForeground:(UIApplication *)application;
Но они работают не так, как я ожидал в моем случае. Например, я использовал свое приложение, и я перешел на какой-то экран. В случае, когда я блокирую экран и возвращаюсь в приложение, приложение вызывает приложение applicationWillEnterForeground, но мне это не нужно, потому что я все еще нахожусь в этом представлении (например, экран тестового экрана), и мне не нужно проверять какие-либо изменения. Но если мое приложение закрыто, я начинаю перемещаться с начала приложения, например, на главный экран. Поэтому, если мое приложение было закрыто, и я нахожусь на главном экране, мне нужно проверить, было ли в предыдущие времена какие-то действия (например, если я прошел тест на экране тестового экрана) и представить этот контроллер представления (ТОЛЬКО В СЛУЧАЕ, ЕСЛИ Я ЗАКРЫЛ APP NOT JUST LOCKED IT ИЛИ ВВЕДИТЕ ПРЕДПОСЫЛКУ).
Спасибо за помощь.
Ответы
Ответ 1
Вы не можете обнаружить это. Из Руководство по программированию приложений для iOS (заголовок "Прекращение действия приложения" ):
Важно: Метод applicationWillTerminate:
не вызывается, если ваше приложение в настоящее время приостановлено.
Даже если вы разрабатываете приложение с помощью iOS SDK 4 и более поздних версий, вы все равно должны быть готовым к тому, чтобы ваше приложение было убито без какого-либо уведомления. пользователь может явно убивать приложения, используя многозадачный интерфейс. К тому же, если память будет ограничена, система может удалить приложения из чтобы сделать больше места. Приостановленные приложения не уведомляются о завершение, но если ваше приложение в настоящее время работает в фоновом режиме (и не приостановлено), система вызывает applicationWillTerminate: метод вашего делегата приложения. Ваше приложение не может запросите дополнительное время выполнения фона из этого метода.
Ответ 2
Вы не можете. Когда ваше приложение убито таким образом, ничего не сказано. Приложение убито ОС без каких-либо предупреждений.
Когда ваше приложение войдет в фоновый режим, вы не сможете узнать, будет ли он запущен или просто вернуться на передний план. Поэтому вы должны правильно обрабатывать вещи, когда приложение входит в фоновый режим.
Когда приложение запустится, восстановите все необходимое состояние.
Ответ 3
В iOS вы не можете проверить это. То есть: процесс SIGKILL'ed. Один из способов, которым я знаю, что мог бы работать, зависит от того, что для того, чтобы убить приложение, сначала нужно его приостановить, нажав кнопку "домой".
Следовательно, вы можете собирать свои действия, так как пользователь использует приложение, фиксирует его в сохраненном месте, когда пользователь приостанавливает приложение. Если пользователь возобновит, reset список и начните сбор информации снова. Однако, если пользователь приостанавливает приложение, и вы никогда не получите резюме, в следующем запуске приложения вы можете прочитать список и восстановить его там.
НТН
Ответ 4
Вы можете реализовать метод -applicationWillTerminate:
вашего делегата UIApplicationDelegate
для ответа на события завершения. Тем не менее, это не гарантируется, что вызывается во всех случаях, поэтому вы не должны полагаться на его вызов. В соответствии с Руководство по программированию приложений iOS:
Если ваше приложение работает (на переднем плане или в фоновом режиме) во время завершения, система вызывает ваш делегат приложений applicationWillTerminate:
, чтобы вы могли выполнить любую необходимую очистку. Вы можете использовать этот метод, чтобы сохранить данные пользователя или информацию о состоянии приложения, которые будут использоваться для восстановления вашего приложения в его текущем состоянии при последующем запуске. Для выполнения любых задач и возврата ваш метод имеет приблизительно 5 секунд. Если он не вернется вовремя, приложение будет убито и удалено из памяти.
Важно: Метод applicationWillTerminate:
не вызывается, если ваше приложение в настоящее время приостановлено.