Жизненный цикл приложения для iOS 4 / 3GS / iPad против 2G / 3G - PullRequest
1 голос
/ 01 февраля 2011

Я прочитал документацию Apple о жизненном цикле приложений и провел несколько тестов, чтобы выяснить, каков жизненный цикл приложений на разных устройствах.(Все работают под управлением iOS 4.x, кроме 2G)

Я протестировал устройства, поддерживающие многозадачность, и устройства, не поддерживающие эту функцию:

Жизненный цикл приложения iPhone 2G / 3G:

(START)
- didFinishLunchingWithOptions
- applicationDidBecomeActive

(HOME PRESSED)
- applicationDidEnterBackground
- appWillTerminate

Жизненный цикл приложения для iPad / iPhone 4:

(START)
- didFinishLunchingWithOptions
- applicationDidBecomeActive

(HOME PRESSED)
- appWillResignActive
- appDidEnterBackGround

(RESART app in the "Taskbar")
- appWillEnterForeGround
- appDidBecomeActive

Я пытался убить приложение с «панели задач», но отладчик получил SIGKILL!Что происходит, когда вы убиваете приложение и таким образом?

Когда appWillTerminate вызывается на устройстве, поддерживающем многозадачность?Верны ли мои результаты?

РЕДАКТИРОВАТЬ:

Цитата из документа Apple о appWillTerminate:

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

Что они имеют в виду под "обычно не вызывается"».«система должна прекратить это ..» означает, что метод appWillTerminate будет вызван?

1 Ответ

1 голос
/ 01 февраля 2011

Я думаю, ты прав.Когда вы убиваете приложение с панели задач (или когда на вашем устройстве не хватает памяти, а ОС убивает приложение за вас), оно просто отправляет сигнал SIGKIL.Как вы заметили, он никогда не вызывает ни одного из обратных вызовов.

Согласно документации :

Для приложений, поддерживающих фоновое выполнение, этот метод обычно неВызывается, когда пользователь выходит из приложения, потому что в этом случае приложение просто перемещается в фоновый режим.Однако этот метод может вызываться в ситуациях, когда приложение работает в фоновом режиме (не приостановлено), и система должна по какой-то причине прекратить его.

Итак, iOS может вызвать applicationWillTerminate: метод, но, вероятно, не будет.(Я никогда не видел его.)

Если вы хотите сохранить какое-либо состояние до того, как ваше приложение будет убито, вам нужно сделать это так, как оно уходит в фон.

...