Нативная разработка мобильных приложений



Download 3,69 Mb.
Pdf ko'rish
bet100/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   96   97   98   99   100   101   102   103   ...   228
Bog'liq
Нативная разработка мобильных приложений

Ёранссон Андерс. 
Эффективное использование потоков в операционной системе An
-
droid. ДМК Пресс, 2017. ISBN 978-5-97060-182-2. – 
Прим. перев.
2
Джошуа Блох
. Java. Эффективное программирование. Лори, 2014. ISBN 978-5-85582-
347-9. – 
Прим. перев.


iOS 

151
чаще всего, даже несмотря на наличие более высокоуровневых инструментов. 
Это связано с простотой и легкостью их создания.
Запуск задачи в фоновом потоке
Итак, как в iOS запустить задачу в фоновом потоке? Вот простой пример:
DispatchQueue.global().async {
print("Do something")
}
Первая строка обращается к глобальной очереди фоновых заданий, которая яв
-
ляется частью механизма Grand Central Dispatch, или «GCD». Мы получаем ссылку 
на глобальную очередь и вызываем ее метод 
async
, передавая свое замыкание. 
Вторая строка – это тело замыкания, которое просто выводит строку текста.
В GCD поддерживается два варианта выполнения операций: синхронный 
и асинхронный. В синхронном режиме операции выполняются с помощью 
метода 
sync()
– они гарантированно будут выполнены немедленно. В асин
-
хронном режиме (с помощью метода 
async()
) операции выполнятся в какой-то 
момент в будущем, который невозможно предсказать точно.
Честно говоря, предыдущего кода достаточно для большинства случаев, но 
иногда желательно иметь возможность более полного контроля над приоритетом 
конкретного фонового задания. Это можно организовать, как показано ниже:
DispatchQueue.global(qos: .userInitiated).async {
print("Do something")
}
Здесь в вызов 
global()
передается новый аргумент 
qos
. Это перечисление, 
определяющее набор приоритетов выполнения в iOS. Доступны следующие 
варианты:
userInteractive
Наивысший приоритет, используемый для интерактивных операций. Если 
с этим приоритетом запустить медленную операцию, это приведет к при
-
тормаживанию пользовательского интерфейса.
userInitiated
Немного более низкий приоритет и чаще используемый для фоновых за
-
даний, чем 
userInteractive
. Обычно применяется для операций, запущен
-
ных пользователем, результаты которых должны быть получены как можно 
быст рее.
default
Приоритет по умолчанию. Используется для заданий с негарантированным 
качеством обслуживания (Quality of Service, QoS). Должен указываться раз
-
работчиками напрямую.
utility
Еще более низкий приоритет. Предназначен для выполнения вспомогатель
-
ных операций, таких как загрузка книги или видео, в приложениях перед
-
него плана.


152

Конкурентное (многопоточное) выполнение
background
Самый низкий приоритет. Используется для выполнения заданий, скрытых 
от пользователя.
unspecified
Предназначен для системных нужд и определения уровня качества обслу
-
живания (QoS). Вы не должны использовать его.
Эти уровни качества обслуживания также соответствуют уровням производитель
-
ности и энергоэффективности. Задания на уровне 
userInteractive
выполняются 
быстрее, но с меньшей энергоэффективностью. Задания на уровне 
background
вы
-
полняются медленнее, но с меньшими затратами электроэнергии.
В предыдущем примере мы передали значение 
userInitiated
, указав, что 
операция должна выполняться вне основного потока в глобальной очереди 
с довольно высоким приоритетом.
Правила качества обслуживания – это один из немногих способов управле
-
ния глобальной очередью заданий. Кроме него, есть еще один способ:
let queue = DispatchQueue(
label: "com.oreilly.nativeappdevelopment", qos: .background, attributes: [.concurrent])
queue.async {
print("Do something")
}
В этом примере мы создали свой экземпляр 
DispatchQueue
. Каждая очередь 
должна иметь уникальную метку. Apple рекомендует использовать метки 
в стиле обратного DNS, но вообще достаточно, чтобы метка была уникальной. 
В нашем примере мы передали в параметре 
qos
значение 
background
, а это озна-
чает, что задания в этой очереди будут выполняться с самым низким приори
-
тетом.
Кроме того, мы передали значение 
.concurrent
в параметре 
attributes
. Это 
означает, что все операции – в данном случае замыкание – в очереди будут 
выполняться одновременно. В глобальной очереди этот параметр по умолча
-
нию имеет значение 
.concurrent
. Для пользовательских очередей, напротив, это 
значение 
не
является значением по умолчанию, то есть задания в них по умол
-
чанию выполняются последовательно.
Мы сохраняем ссылку на эту новую очередь в переменной 
queue
. Следующая 
инструкция обращается к этому объекту очереди и точно так же, как в преды
-
дущих примерах, вызывает его метод 
async(_:)
.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   96   97   98   99   100   101   102   103   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish