Поведение приложения при перезапуске устройства iOS (с запущенным приложением) - PullRequest
2 голосов
/ 12 января 2012

У меня странная проблема. Приложение для iPhone защищено паролем, и только после ввода правильного пароля пользователь может снова войти в систему. Также приложение имеет несколько экранов.

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

Разве приложение не потеряло бы все данные в памяти при перезапуске устройства? Разве мнения не должны быть нарисованы снова? Как именно приложение ведет себя в этом случае.

EDIT: Я сделал то, что предложил TriPhoenix. Я заметил, что если вы включите устройство и запустите приложение очень скоро, метод делегата applicationDidBecomeActive не будет вызван. Однако, если вы дадите ему некоторое время перед запуском, все будет работать так, как ожидалось. Разве метод applicationDidBecomeActive не должен вызываться при каждом запуске приложения?

Что я тестирую на: ОС: iOS 5.0.1 Xcode: 4.2.1 Устройство: iPhone 4s

1 Ответ

2 голосов
/ 12 января 2012

Возможно ли, что ваше приложение очень мало с точки зрения использования памяти? Я помню доклад WWDC (к сожалению, сейчас не могу найти нужного), в котором говорится, что очень маленькие приложения с точки зрения использования памяти (предел не определен публично, но я думаю, что это было около 16 МБ использования памяти) не уничтожаются нехватка памяти, а скорее приостановлено к флэш-памяти телефона, чтобы разбудить позже. Я не уверен, что это разработано, чтобы пережить полное отключение, но это, безусловно, будет одна из немногих возможностей. Чтобы проверить это, вы можете попытаться искусственно увеличить использование памяти, создав несколько больших объектов / массивов и посмотреть, исчезнет ли проблема.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...