Переход из неактивного состояния в фоновое
Как следует из приведенных выше строк сообщений, данное приложение фактически переходит между двумя состояниями. Сначала оно становится неактивным, а затем переходит в фоновое состояние. Однако из этих строк совсем не следует, что приложение переходит также в третье состояние — приостановки. Напомним, что уведомления о подобном переходе нельзя получить, поскольку они нам неподвластны. Следует, однако, иметь в виду, что данное приложение оказывается в каком-то смысле по-прежнему "живым" и связанным со средой Xcode, несмотря на то, что ему не предоставляется время центрального процессора. Для того чтобы убедиться в этом, попробуйте постучать пальцем по пиктограмме данного приложения, чтобы перезапустить его, в результате чего на консоль будут выведены следующие строки сообщений.
Далее постучите дважды по кнопке возврата в исходное состояние, нажмите пальцем на пиктограмме State Lab и не отпускайте его до тех пор пока не появится пиктограмма удаления, после чего удалите данное приложение. Что же при этом происходит? Как ни странно, на консоль ничего не выводится, кроме сообщения "Debugging terminated" в строке состояния, расположенной в нижней части консольного окна.
Оказывается, что метод applicationWillTerminate: не вызывается в обычном порядке, когда система переводит приложение из состояния приостановки в состояние невыполнения. Когда приложение находится в состоянии приостановки, или из-за того, что система выгрузит его из оперативной памяти, чтобы освободить ее, или же из-за того, что оно принудительно завершается пользователем вручную, оно просто исчезает, не имея возможности что-нибудь сделать. Метод applicationWillTerminate: вызывается только в том случае, если завершаемое приложение находится в фоновом состоянии. Это может произойти, например, в том случае, если приложение выполняется в фоновом состоянии и принудительно завершается пользователем и ли системой.
Теперь исследуем еще одно интересное взаимодействие, возникающее в том случае, когда система выводит предупреждающее диалоговое окно, временно перенимая поток ввода у приложения и переводя его в неактивное состояние. Приложение нетрудно перевести в это состояние, но только в том случае, если оно выполняется на настоящем устройстве, например iPhone, а не в имитаторе. Если у вас имеются все права на выполнение собственных приложений на вашем iPhone, постройте отладочную версию рассматриваемого здесь приложения и запустите его на выполнение на своем мобильном телефоне. Затем попросите кого-нибудь прислать сообщение SMS на ваш iPhone. Когда на экране iPhone появится системное предупреждение с отображаемым сообщением SMS, на консоль Xcode будет выведена строка сообщений.
- Дата: 5-01-2015, 20:52