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

на главную

Жанры

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

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

Шрифт:

Обсуждение

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

Если для работы приложения вам необходима возможность получать информацию об изменении местоположения пользовательского

устройства, даже если программа работает в фоновом режиме, то нужно добавить значение location к ключу UIBackgroundModes в основной файл. plist вашего приложения, как показано в подразделе «Решение» данного раздела. В таком случае, даже будучи в фоновом режиме, ваше приложение продолжит получать информацию об изменении местоположения устройства. Протестируем простое приложение, в котором у нас будет только делегат.

В этом приложении я собираюсь сохранить логическое значение в делегате приложения, которое будет называться executingInBackground. Когда приложение переходит в фоновый режим, задам этому делегату значение YES, а когда оно вернется в приоритетный режим — изменю данное значение на NO. Когда будут получены данные об изменении геолокационной информации от Core Location, мы проверим этот флаг. Если флаг установлен в YES, то мы не будем заниматься никакими энергоемкими вычислениями или любыми обновлениями пользовательского интерфейса, поскольку наше приложение сейчас работает в фоновом режиме. Мы, будучи ответственными программистами, не будем нагружать приложение никакими тяжелыми задачами. Но если программа действует в приоритетном режиме, то в нашем распоряжении вся вычислительная мощность устройства, которую мы можем бросить на обработку необходимых функций. Кроме того, попытаемся добиться максимальной точности при определении местоположения, если наша программа работает в приоритетном режиме. Когда же программа уходит в фоновый режим, эту точность можно смело снизить, чтобы уменьшить нагрузку на геолокационные сенсоры. Итак, определим делегат приложения:

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

@interface AppDelegate <CLLocationManagerDelegate>

@property (nonatomic, strong) UIWindow *window;

@property (nonatomic, strong) CLLocationManager *myLocationManager;

@property (nonatomic, unsafe_unretained, getter=isExecutingInBackground)

BOOL executingInBackground;

@end

@implementation AppDelegate

<# Остаток вашего кода находится здесь #>

Продолжим. Создадим диспетчер местоположения и запустим его сразу после запуска приложения:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

self.myLocationManager = [[CLLocationManager alloc] init];

self.myLocationManager.desiredAccuracy = kCLLocationAccuracyBest;

self.myLocationManager.delegate = self;

[self.myLocationManager startUpdatingLocation];

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Как

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

— (void)applicationDidEnterBackground:(UIApplication *)application{

self.executingInBackground = YES;

/* Снижаем точность определения местоположения и нагрузку

на iOS, пока работаем в фоновом режиме. */

self.myLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;

}

Когда программа вернется из фонового режима в приоритетный, точность опять можно будет поднять до высокого уровня:

— (void)applicationWillEnterForeground:(UIApplication *)application{

self.executingInBackground = NO;

/* Теперь, когда приложение вернулось в приоритетный режим, повышаем

точность определения местоположения. */

self.myLocationManager.desiredAccuracy = kCLLocationAccuracyBest;

}

Кроме того, целесообразно было бы избежать любой интенсивной обработки в такой ситуации: приложение находится в фоновом режиме, и тут диспетчер местоположения получает обновление. Поэтому необходимо обработать метод locationManager: didUpdateToLocation: fromLocation: делегата нашего приложения следующим образом:

— (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

fromLocation:(CLLocation *)oldLocation{

if ([self isExecutingInBackground]){

/* Работаем в фоновом режиме.

Не выполняем никакой сложной обработки. */

} else {

/* Работаем в приоритетном режиме. Запускаем любые вычисления,

какие требуются */

}

}

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

Враг Империи

Медведев Антон Николаевич
Фантастика:
боевая фантастика
7.00
рейтинг книги
Враг Империи

Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Звягинцев Василий Дмитриевич
15. Одиссей покидает Итаку
Фантастика:
альтернативная история
8.24
рейтинг книги
Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Американский доктор из России, или история успеха

Голяховский Владимир Юльевич
Документальная литература:
биографии и мемуары
6.60
рейтинг книги
Американский доктор из России, или история успеха

Все тайны Земли, которые ты должен узнать, прежде чем умрешь

Пименова В. Л.
Все тайны Земли
Научно-образовательная:
прочая научная литература
5.00
рейтинг книги
Все тайны Земли, которые ты должен узнать, прежде чем умрешь

Невменяемый колдун

Иванович Юрий
1. Невменяемый колдун
Фантастика:
фэнтези
8.73
рейтинг книги
Невменяемый колдун

1115 вопросов священнику

раздел сайта Православие.Ru
Религия и эзотерика:
православие
христианство
религия
прочая религиозная литература
5.00
рейтинг книги
1115 вопросов священнику

Коллонтай. Валькирия и блудница революции

Соколов Борис Вадимович
Человек-загадка
Документальная литература:
биографии и мемуары
научпоп
5.00
рейтинг книги
Коллонтай. Валькирия и блудница революции

Капитал

Маркс Карл Генрих
Научно-образовательная:
философия
политика
8.94
рейтинг книги
Капитал

МИФЫ. Великолепный МИФ (сборник)

Асприн Роберт Линн
Мифология
Фантастика:
юмористическое фэнтези
8.76
рейтинг книги
МИФЫ. Великолепный МИФ (сборник)

#Бояръ-Аниме. Газлайтер. Том 7

Володин Григорий Григорьевич
7. История Телепата
Фантастика:
аниме
фэнтези
попаданцы
альтернативная история
4.80
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 7

Избранное

Носсак Ганс Эрих
Мастера современной прозы
Проза:
современная проза
5.00
рейтинг книги
Избранное

Сумерки божков

Амфитеатров Александр Валентинович
1. Романы
Проза:
русская классическая проза
5.00
рейтинг книги
Сумерки божков

Библия Раджниша. Том 2. Книга 2

Раджниш Бхагаван Шри
Религия и эзотерика:
самосовершенствование
эзотерика
5.00
рейтинг книги
Библия Раджниша. Том 2. Книга 2

Брет Гарт. Том 6

Гарт Фрэнсис Брет
Приключения:
вестерны
5.00
рейтинг книги
Брет Гарт. Том 6