iOS. Приемы программирования
Шрифт:
Как видите, в обработчике завершения (Completion Handler) фоновой задачи мы вызываем метод endBackgroundTask делегата приложения. Этот метод написали мы сами, и выглядит он так:
Есть
• завершить все потоки и таймеры независимо от того, являются они таймерами из фреймворка Core Foundation или созданы с помощью GCD;
• завершить фоновую задачу, вызвав метод endBackgroundTask: класса UIApplication;
• пометить задачу как завершенную, присвоив значение UIBackgroundTaskInvalid идентификаторам задачи.
И последнее, но немаловажное. Если приложение выходит в приоритетный режим, а долгосрочная задача все еще не завершена, необходимо гарантированно от нее избавиться:
В нашем примере, как только приложение переходит в фоновый режим, мы запрашиваем дополнительное время на завершение долгосрочной задачи (в данном случае, например, для выполнения кода нашего таймера). В то время мы регулярно считываем значение свойства backgroundTimeRemaining экземпляра класса UIApplication и выводим найденное значение на консоль. В методе экземпляра beginBackgroundTaskWithExpirationHandler:, который относится к классу UIApplication, мы записали код, который будет выполнен прямо перед тем, как закончится дополнительное время, выделенное приложению на выполнение долгосрочной задачи. (Как правило, это происходит за 5–10 секунд до истечения времени, выделенного на выполнение задачи.) Здесь мы можем просто завершить задачу, вызвав метод экземпляра endBackgroundTask:, относящийся к классу UIApplication.
Если приложение перешло в фоновый режим и запросило у операционной системы дополнительное время на исполнение кода еще до того, как отведенное время истекло, пользователь может «оживить» приложение и вернуть его в приоритетный режим. Если до этого вы приказали исполнять долгосрочную задачу в фоновом режиме и как раз для этого приложение было переведено в фоновый режим, то нужно завершить долгосрочную задачу с помощью метода экземпляра endBackgroundTask:, относящегося к классу UIApplication.
См. также
Раздел 14.1.
14.3. Добавление возможностей фонового обновления в приложения
Постановка задачи
Требуется, чтобы ваше приложение могло обновлять контент в фоновом режиме, пользуясь новыми возможностями, появившимися в последнем iOS SDK.
Решение
Добавьте в приложение возможность фонового обновления (background fetch).
Рыцарь Империи
3. Одержимый
Фантастика:
фэнтези
рейтинг книги
Талисман
12. Темная Башня
Фантастика:
фэнтези
рейтинг книги
Приключения Гаррета. том.2
Фантастика:
фэнтези
рейтинг книги
Основы философии
Научно-образовательная:
философия
рейтинг книги
Клинки у трона
3. Рыцарь Ордена
Фантастика:
фэнтези
рейтинг книги
Театр теней. Новые рассказы в честь Рэя Брэдбери (сборник)
Интеллектуальный бестселлер. Читает весь мир.
Фантастика:
фэнтези
научная фантастика
городское фэнтези
рейтинг книги
На границе империй. Том 9. Часть 5
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Исаак Лакедем
Приключения:
исторические приключения
рейтинг книги
Невменяемый колдун
1. Невменяемый колдун
Фантастика:
фэнтези
рейтинг книги
Наследники Фауста
Фантастика:
альтернативная история
рейтинг книги