Как выполнить очистку, когда приложение убито в фоновом режиме? - PullRequest
5 голосов
/ 10 января 2011

Мое приложение создает временные файлы, которые мне нужны в течение всего жизненного цикла.В конечном итоге мне нужно избавиться от этих файлов, чтобы они не занимали место на устройстве.Я подумал, что смогу удалить их, когда закроется приложение, но поскольку многозадачность была введена, жизненный цикл не так прост, как раньше.Мой главный вопрос: когда мое приложение переходит в фоновый режим и позже убивается, оно получает applicationWillTerminate:?Или это просто стирается из памяти?

Я не могу выполнить очистку, когда приложение переходит в фоновый режим, так как оно может быть фоновым в середине операции и потребует временных файлов, как только оно вернетсяна переднем плане.Я думаю, что смогу очистить файлы при запуске, но мне все равно интересно поведение applicationWillTerminate:.

Ответы [ 2 ]

5 голосов
/ 10 января 2011

Нет, applicationWillTerminate: не вызывается на многозадачных устройствах с iOS 4.Когда ваше приложение завершается, это обычно означает, что устройству не хватает памяти, поэтому, даже если вызван сделал , нельзя сказать, что у вас все равно будет достаточно памяти для выполнения задачи.

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

Другими вашими вариантами будет приведение в порядок по завершении задачи(когда бы это ни было) или когда приложение запущено.Я предполагаю, что могут быть другие перестановки ...

1 голос
/ 10 января 2011

Интернет говорит, что applicationWillTerminate: не вызывается, пока приложение убивается в фоновом режиме. Другой способ - сохранить некоторую информацию (в NSUserDefaults или около того), какие временные файлы вы открыли, и после запуска проверить, остались ли эти файлы, и удалить их. Кроме того, вы можете узнать, как iOS убивает ваше приложение (я предполагаю, что это делается путем отправки сигналов, однако я не уверен) и добавить обработчик сигналов в ваше приложение.

...