Приложение для iPhone под управлением Simulator 4.0 получило Sigkill - PullRequest
8 голосов
/ 23 июня 2010

Я только что получил iPhone SDK 4, и я пытаюсь прекратить разработку приложения, над которым я работал раньше.Так что я реализовал -(void)applicationDidEnterBackground:(UIApplication *)application и - (void)applicationWillTerminate:(UIApplication *)application

Когда я нажимаю кнопку «Домой» в симуляторе 4.0, кажется, все работает нормально.Приложение вызывает -(void)applicationDidEnterBackground:(UIApplication *)application и переходит в фоновое состояние ..

Однако затем я дважды щелкаю кнопку «Домой», чтобы открыть приложение, работающее в фоновом режиме, и удерживаю его, чтобы отобразить знак минуса или выйти,Когда я нажимаю знак минус, отладчик говорит:

Программа получила сигнал: "SIGKILL"

кроме того, - (void)applicationWillTerminate:(UIApplication *)application никогда не вызывается.Я что-то упустил, чтобы это работало на OS4?Или, по крайней мере, кто-нибудь может указать мне способ отладки SIGKILL.Благодарю.

Ответы [ 2 ]

13 голосов
/ 23 июня 2010

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

Если приложение работает в фоновом режиме (например, при воспроизведении музыки или выполнении некоторых фоновых задач), и пользователь вручную завершает приложение, нажимая кнопку «минус», только тогда вы действительно получите сообщение -applicationWillTerminate:.Таким образом, вы должны сохранить все свое состояние / и т.д.прежде чем вернуться из -applicationDidEnterBackground:.

2 голосов
/ 24 июня 2010

Ожидается, что многозадачная полоса "красная кнопка закрытия" является эквивалентом принудительного выхода из приложения в Mac OS X. Это задокументированное поведение. Apple ожидает, что обычные пользователи iOS 4 будут просто запускать / использовать / отключать приложения, которые им не нужно думать с точки зрения завершения процессов или чего-либо еще. Система справится с этим.

Просто сохраните все важные данные в приложении: willResignActive: или applicationWillEnterBackground. Потому что после этого вы можете быть убиты, когда давление памяти вынуждает систему очищаться ... Snow Leopard ввел аналогичное поведение для приложений, которые используют ключ NSSupportsSuddenTermination в своем Info.plist. Приложение в основном сообщает системе, что оно периодически сохраняет свои данные по крупицам, поэтому, когда оно переходит в фоновый режим, ничего не остается или очень мало. В отличие от больших монолитных приложений, настольные приложения ...

...