Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Простое правило сводится к тому, что, работая в фоновом режиме, нужно потреблять минимальный объем памяти и вычислительной мощности, который требуется для удовлетворения нужд приложения. Поэтому, снижая точность диспетчера местоположения, пока он действует в фоновом режиме, мы снижаем и вычислительную нагрузку на iOS, которая должна доставлять приложению новую геолокационную информацию.

В зависимости от того, в какой версии симулятора iOS вы тестируете свои приложения, а также от настроек сетевого соединения и многих других факторов, влияющих на этот процесс, фоновая обработка

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

14.6. Сохранение и загрузка состояния приложений iOS, использующих многозадачность

Постановка задачи

Необходимо, чтобы при отправке приложения для iOS в фоновый режим его состояние сохранялось и восстанавливалось, как только приложение вернется в приоритетный режим.

Решение

Комбинируйте сообщения протокола UIApplicationDelegate, отправляемые делегату вашего приложения, и уведомления, которые посылает система iOS. Так вы сможете сохранять состояние приложений.

Обсуждение

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

1. application: didFinishLaunchingWithOptions:.

2. applicationDidBecomeActive:.

Если пользователь нажимает кнопку Home (Домой) на своем устройстве с iOS, то делегат приложения получит следующие сообщения в таком порядке.

1. applicationWillResignActive:.

2. applicationDidEnterBackground:.

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

1. applicationWillEnterForeground:.

2. applicationDidBecomeActive:.

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

Чтобы можно было сохранять и вновь загружать состояние наших приложений, нужно тщательно взвешивать, выполнение каких задач следует приостановить, переходя в фоновый режим, а возобновить — лишь когда программа вернется в приоритетный режим. Рассмотрим пример. Сама система может с легкостью восстанавливать сетевые соединения. Поэтому мы можем ничего специально не предпринимать, если качаем файл из Сети. Но когда мы, например, пишем игру, лучше слушать те уведомления, которые iOS направляет нашей программе, работающей в фоновом режиме, и адекватно на них реагировать. В таком случае можно просто «поставить

на паузу» игровой движок. Это же при необходимости можно проделать и со звуковым движком.

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

Рассмотрим сохранение состояния на примере. Предположим, мы пишем игру для iOS. Когда игра отправляется в фоновый режим, нам нужно сделать следующее.

1. Приостановить игровой движок.

2. Сохранить на диск очки, заработанные пользователем.

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

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

1. Загрузить с диска заработанные пользователем очки.

2. Загрузить с диска тот уровень, на котором пользователь прервал игру.

3. Возобновить работу игрового движка.

А теперь предположим, что делегат нашего приложения — это игровой движок. Определим в заголовочном файле делегата приложения несколько методов:

#import <UIKit/UIKit.h>

@interface AppDelegate: UIResponder <UIApplicationDelegate>

@property (nonatomic, strong) UIWindow *window;

/* Сохраняем состояние нашего приложения. */

— (void) saveUserScore;

— (void) saveLevelToDisk;

— (void) pauseGameEngine;

/* Загружаем состояние нашего приложения. */

— (void) loadUserScore;

— (void) loadLevelFromDisk;

— (void) resumeGameEngine;

@end

Переходим к работе с заглушками методов, уже присутствующими в файле реализации делегата приложения:

#import «AppDelegate.h»

@implementation AppDelegate

— (void) saveUserScore{

/* Здесь сохраняем очки, заработанные пользователем. */

}

— (void) saveLevelToDisk{

/* Сохраняем на диске текущий уровень и положение игрока

на карте этого уровня. */

}

— (void) pauseGameEngine{

Поделиться:
Популярные книги

Свердлов. Оккультные корни Октябрьской революции

Шамбаров Валерий Евгеньевич
Документальная литература:
биографии и мемуары
7.33
рейтинг книги
Свердлов. Оккультные корни Октябрьской революции

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

История Руси и русского Слова

Кожинов Вадим Валерьянович
Научно-образовательная:
история
8.33
рейтинг книги
История Руси и русского Слова

В интересах империи

Янковский Дмитрий Валентинович
Фантастика:
боевая фантастика
6.00
рейтинг книги
В интересах империи

Крещение огнем. Звезда пленительного риска

Калашников Максим
Фантастика:
альтернативная история
4.80
рейтинг книги
Крещение огнем. Звезда пленительного риска

Сборник.Том 2

Азимов Айзек
2. Отцы-основатели. Весь Азимов
Фантастика:
научная фантастика
5.00
рейтинг книги
Сборник.Том 2

Призраки в Сети

де Линт Чарльз
Фантастика:
ужасы и мистика
6.40
рейтинг книги
Призраки в Сети

Правила мозга. Что стоит знать о мозге вам и вашим детям

Медина Джон
Научно-образовательная:
психология
4.62
рейтинг книги
Правила мозга. Что стоит знать о мозге вам и вашим детям

Замок. Процесс. Америка. Три романа в одном томе

Кафка Франц
Проза:
классическая проза
5.00
рейтинг книги
Замок. Процесс. Америка. Три романа в одном томе

Рабы Парижа

Габорио Эмиль
Детективы:
прочие детективы
5.00
рейтинг книги
Рабы Парижа

Черный лебедь. Тетралогия

Мид Райчел
Черный Лебедь
Фантастика:
фэнтези
ужасы и мистика
детективная фантастика
8.74
рейтинг книги
Черный лебедь. Тетралогия

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Антропологические традиции

Коллектив авторов
Научно-образовательная:
история
культурология
5.00
рейтинг книги
Антропологические традиции

Точка Бифуркации IV

Смит Дейлор
4. ТБ
Фантастика:
героическая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации IV