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

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

Жанры

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

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

Шрифт:

Будучи в приоритетном режиме, наше приложение продолжит загрузку файла. В ходе загрузки пользователь может нажать кнопку Home (Домой) и отправить приложение в фоновый режим. И тогда вы увидите настоящее волшебство! iOS автоматически приостановит процесс загрузки без всякого вашего вмешательства. Когда же пользователь вновь переведет программу в приоритетный режим, загрузка возобновится и вам не придется писать ни единой строки кода для обработки многозадачности в такой ситуации.

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

в боевом проекте!):

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

/* Заменяем этот URL ссылкой на крупный файл. */

NSString *urlAsString = @"http://www.apple.com";

NSURL *url = [NSURL URLWithString: urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSError *error = nil;

NSData *connectionData =

[NSURLConnection sendSynchronousRequest: urlRequest

returningResponse: nil

error:&error];

if ([connectionData length] > 0 &&

error == nil){

}

else if ([connectionData length] == 0 &&

error == nil){

}

else if (error!= nil){

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Если вы запустите это приложение и переведете его в фоновый режим, то заметите, что на задний план отходит только графический пользовательский интерфейс, но вот ядро приложения никуда из приоритетного режима не уходит и нужные сообщения делегата — applicationWillResignActive: и applicationDidEnterBackground: — так и не будут получены. Я проводил такой опыт на iPhone.

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

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

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

dispatch_queue_t dispatchQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(dispatchQueue, ^(void) {

/* Заменяем
этот URL ссылкой на крупный файл. */

NSString *urlAsString = @"http://www.apple.com";

NSURL *url = [NSURL URLWithString: urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSError *error = nil;

NSData *connectionData = [NSURLConnection

sendSynchronousRequest: urlRequest

returningResponse: nil

error:&error];

if ([connectionData length] > 0 &&

error == nil){

}

else if ([connectionData length] == 0 &&

error == nil){

}

else if (error!= nil){

}

});

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

См. также

Раздел 14.2.

14.8. Отказ от многозадачности

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

Требуется исключить использование в вашем приложении многозадачности.

Решение

Добавьте в главный файл. plist приложения ключ UIApplicationExitsOnSuspend и задайте ему значение true:

<# Некоторые ключи и значения #>

<key>UIApplicationExitsOnSuspend</key>

<true/>

<# Остальные ключи и значения #>

Обсуждение

Иногда бывает необходимо исключить возможность многозадачности в приложениях для iOS. (Хотя я настоятельно рекомендую разрабатывать программы с поддержкой многозадачности.) В таких случаях нужно добавить ключ UIApplicationExitsOnSuspend в главный файл. plist приложения. Устройства с самыми новыми версиями системы iOS понимают это значение, и операционная система будет завершать приложения, не переводя их в фоновый режим, если в файле. plist того или иного приложения этот ключ будет иметь значение true. В более ранних версиях iOS, где не поддерживается многозадачность, операционная система будет просто игнорировать это значение.

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

Я бог. Книга XXXIX

Дрейк Сириус
39. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я бог. Книга XXXIX

Первый среди равных. Книга II

Бор Жорж
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга II

Мир Лема - словарь и путеводитель

Ашкинази Леонид Александрович
Фантастика:
научная фантастика
5.00
рейтинг книги
Мир Лема - словарь и путеводитель

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

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

Богиня на кухне

Кинселла Софи
Проза:
современная проза
8.87
рейтинг книги
Богиня на кухне

Крылья

Крайтон Майкл
Детективы:
триллеры
7.00
рейтинг книги
Крылья

Ожог

Бэнкс Майя
3. Затаивший дыхание
Любовные романы:
современные любовные романы
эро литература
8.43
рейтинг книги
Ожог

Приключения Гаррета. том.2

Кук Глен Чарльз
Фантастика:
фэнтези
6.80
рейтинг книги
Приключения Гаррета. том.2

Пилот штрафной эскадрильи

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
5.79
рейтинг книги
Пилот штрафной эскадрильи

И тогда мы скоро полетим на Марс, если только нам это будет нужно

Павлов Алексей Андреевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И тогда мы скоро полетим на Марс, если только нам это будет нужно

Том 6. Может быть — да, может быть — нет. Леда без лебедя. Новеллы. Пескарские новеллы

д’Аннунцио Габриэле
6. Габриэле Д'Аннунцио Собрание сочинений в шести томах
Проза:
классическая проза
6.25
рейтинг книги
Том 6. Может быть — да, может быть — нет. Леда без лебедя. Новеллы. Пескарские новеллы

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.50
рейтинг книги
Дважды одаренный. Том VI

Экстр

Зинделл Дэвид
3. Реквием по Homo Sapiens
Фантастика:
научная фантастика
6.25
рейтинг книги
Экстр

Белый шаман

Шундик Николай Елисеевич
Проза:
советская классическая проза
6.25
рейтинг книги
Белый шаман