Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Эффективное использование потоков в операционной системе Android

Покупка
Артикул: 712462.02.99
Доступ онлайн
559 ₽
В корзину
Чтобы написать действительно полезное и удобное приложение для Android, то без многопоточности никак не обойтись, но как узнать о технологиях и методиках, которые помогут решить такую задачу? Книга с практической точки зрения описывает несколько асинхронных механизмов, доступных в программной среде Android SDK, а также рассматривает основные принципы и правила выбора одного из этих них, лучше всего подходящего для создаваемого приложения. Издание предназначено для программистов разной квалификации, уже работающих под Android и желающих улучшить качество создаваемых программ.
Ёранссон, А. Эффективное использование потоков в операционной системе Android : практическое пособие / А. Ёранссон ; пер. с англ. А. Снастина. - Москва : ДМК Пресс, 2018. - 312 с. - ISBN 978-5-97060-182-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/2012515 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Эффективное  
использование потоков  
в операционной системе 
Android

Андерс Ёранссон

Efficient Android 
Threading

Anders Gо..ransson

Эффективное  

использование потоков  
в операционной системе 

Android

Москва, 2018

Андерс Ёранссон

УДК 004.451.9Android:004.451.2
ББК 32.972.11
 
Г11

 
 
Ёранссон А.

Г11 
Эффективное использование потоков в операционной системе 
Android / пер. с англ. А. Снастина. – М.: ДМК Пресс, 2018. – 
312 с.: ил. 

 
ISBN 978-5-97060-182-2

Чтобы написать действительно полезное и удобное приложение для Android, 

то без многопоточности никак не обойтись, но как узнать о технологиях и методиках, которые помогут решить такую задачу? Книга с практической точки зрения 
описывает несколько асинхронных механизмов, доступных в программной среде 
Android SDK, а также рассматривает основные принципы и правила выбора одного 
из этих них, лучше всего подходящего для создаваемого приложения.

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

 
УДК  004.451.9Android:004.451.2

 
ББК 32.972.11

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

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

ISBN 978-1-449-36413-7 (анг.) 
Copyright © Anders Gоransson
..

ISBN 978-5-97060-182-2 (рус.) 
©  Оформление, перевод,  

 
 
ДМК Пресс

Посвящается Анне, Фабиану и Иде

Содержание

Предисловие............................................................13

Глава.1..Компоненты.ОС.Android.и.необходимость..
параллельных.вычислений..........................................19
Стек программной среды ОС Android ........................................................................19
Архитектура приложения ...............................................................................................21
Приложение .................................................................................................................21
Компоненты .................................................................................................................21
Activity ..................................................................................................................22
Service ....................................................................................................................24
ContentProvider..................................................................................................24
BroadcastReceiver ..............................................................................................25
Выполнение приложения ................................................................................................25
Процесс Linux .............................................................................................................25
Жизненный цикл .......................................................................................................26
Запуск приложения ..........................................................................................26
Завершение приложения ................................................................................27
Структурирование приложений для улучшения производительности .........29
Создание отзывчивых приложений с помощью потоков ............................30
Резюме ...................................................................................................................................32

Часть.I..Основы.........................................................33

Глава.2..Многопоточность.в.Java..................................34
Основы использования потоков ...................................................................................34
Выполнение .................................................................................................................35
Приложение с одним потоком ..............................................................................37
Многопоточное приложение .................................................................................37
Увеличение потребления ресурсов .............................................................38
Повышенная сложность ..................................................................................38
Нарушение целостности данных .................................................................38
Безопасное состояние потока ........................................................................................40
Внутренняя блокировка и монитор Java ...........................................................41
Синхронизация доступа к совместно используемым ресурсам ................43
Использование внутренней блокировки ...................................................43
Явное использование механизмов блокировки ......................................45
Пример: потребитель и производитель ..............................................................46
Стратегии выполнения задачи ......................................................................................48
Проектирование параллельного выполнения .................................................49
Резюме ...................................................................................................................................50

Содержание  7

Глава.3..Потоки.в.ОС.Android........................................51
Потоки приложения ОС Android .................................................................................51
UI-поток ........................................................................................................................51
Связующие потоки ....................................................................................................52
Фоновые потоки .........................................................................................................53
Процесс Linux и потоки ...................................................................................................53
Планирование .............................................................................................................57
Приоритет ............................................................................................................58
Управляющие группы ......................................................................................59
Резюме ...................................................................................................................................61

Глава.4..Взаимодействие.потоков................................62
Программные каналы .......................................................................................................62
Основы использования программного канала ................................................64
Пример: обработка текста в рабочем потоке ....................................................66
Совместно используемая память..................................................................................68
Механизм сигналов ...................................................................................................69
Блокирующая очередь BlockingQueue .......................................................................71
Передача сообщений в ОС Android .............................................................................73
Пример: простая передача сообщений ...............................................................74
Классы, используемые при реализации механизма передачи  
сообщений ....................................................................................................................77
Класс MessageQueue .........................................................................................77
Интерфейс MessageQueue.IdleHandler ......................................................79
Пример: использование интерфейса IdleHandler  
для завершения ненужного потока .............................................................80
Класс Message .............................................................................................................82
Состояние «инициализировано» .................................................................84
Состояние «ожидание» ...................................................................................85
Состояние «передано» .....................................................................................85
Состояние «готово к повторному использованию» ..............................85
Класс Looper ................................................................................................................86
Завершение работы объекта Looper ............................................................87
Объект Looper в UI-потоке ............................................................................88
Класс Handler ..............................................................................................................88
Создание и настройка ......................................................................................89
Создание сообщения ........................................................................................90
Вставка сообщения в очередь ........................................................................90
Пример: передача сообщений в двух направлениях .............................92
Обработка сообщений ......................................................................................95
Удаление сообщений из очереди ..........................................................................97
Наблюдение за очередью сообщений .................................................................99
Получение текущего состояния очереди сообщений ...........................99

 Содержание

Отслеживание обработки очереди сообщений .....................................102
Взаимодействие с UI-потоком ....................................................................................103
Резюме .................................................................................................................................104

Глава.5..Взаимодействие.между.процессами...............105
Механизм вызова удалённых процедур в ОС Android .......................................105
Объект Binder............................................................................................................106
Язык AIDL ..........................................................................................................................108
Синхронные вызовы удалённых процедур .....................................................110
Асинхронные вызовы удалённых процедур ...................................................113
Передача сообщений с использованием объекта Binder ....................................115
Однонаправленное взаимодействие .................................................................117
Взаимодействие в двух направлениях .............................................................119
Резюме .................................................................................................................................120

Глава.6..Управление.памятью....................................121
Сборка мусора ...................................................................................................................121
Утечки памяти, связанные с использованием потоков .......................................123
Выполнение потока .................................................................................................125
Внутренние классы .........................................................................................126
Статические внутренние классы ................................................................127
Рассогласование жизненных циклов ........................................................128
Взаимодействие потоков .......................................................................................131
Отправка сообщения с данными ................................................................132
Передача сообщения с задачей ...................................................................133
Устранение утечек памяти ............................................................................................134
Использование статических внутренних классов ........................................135
Использование слабых ссылок ...........................................................................135
Остановка рабочего потока ..................................................................................136
Переключение рабочих потоков .........................................................................136
Очистка очереди сообщений ...............................................................................136
Резюме .................................................................................................................................137

Часть.II..Механизмы.асинхронного.выполнения............138

Глава.7..Управление.жизненным.циклом.простого..
потока...................................................................139
Основы использования потоков .................................................................................139
Жизненный цикл .....................................................................................................139
Прерывания ...............................................................................................................141
Неперехватываемые исключения ......................................................................143
Управление потоком .......................................................................................................145
Определение и запуск потока ..............................................................................145
Анонимный внутренний класс ...................................................................145

Содержание  9

Общедоступный поток ..................................................................................146
Определение потока как статического внутреннего класса .............146
Обзор возможных вариантов выбора определения потока ..............147
Сохранение потока в рабочем состоянии ........................................................147
Сохранение потока в рабочем состоянии средствами класса  
Activity ................................................................................................................148
Сохранение потока в рабочем состоянии средствами класса 
Fragment..............................................................................................................151
Резюме .................................................................................................................................153

Глава.8..HandlerThread:.механизм.очереди..
сообщений.высокого.уровня......................................155
Основы использования HandlerThread ....................................................................155
Жизненный цикл HandlerThread ...............................................................................157
Случаи использования ...................................................................................................159
Повторяющееся выполнение задачи .................................................................159
Связанные задачи ....................................................................................................160
Пример: обеспечение надёжности данных с помощью 
SharedPreferences .............................................................................................160
Объединение задач в цепочку .............................................................................163
Пример: сетевые вызовы в цепочке задач ...............................................163
Вставка задач по условию .....................................................................................166
Резюме .................................................................................................................................167

Глава.9..Управление.выполнением.потока.средствами..
фреймворка.Executor...............................................168
Executor ...............................................................................................................................169
Пулы потоков ....................................................................................................................171
Предопределённые пулы потоков ......................................................................172
Пулы потоков, определяемые разработчиком ...............................................173
Конфигурация ThreadPoolExecutor .........................................................173
Проектирование пула потоков ............................................................................175
Определение размера .....................................................................................175
Динамические потоки в пуле ......................................................................177
Ограниченная или неограниченная очередь задач ..............................177
Конфигурация потока ....................................................................................178
Расширение возможностей ThreadPoolExecutor .................................179
Жизненный цикл .....................................................................................................180
Корректное завершение работы пула потоков ..............................................181
Варианты использования пула потоков и возникающие  
при этом сложности ................................................................................................183
Предпочтение отдаётся созданию потока, а не организации  
очереди ................................................................................................................183

 Содержание

Обработка предварительно подготовленных очередей задач ..........183
Опасная ситуация при нулевом количестве базовых потоков  
в пуле ...................................................................................................................184
Управление задачами ......................................................................................................184
Представление задачи ............................................................................................185
Добавление задач .....................................................................................................186
Заявление отдельной задачи .......................................................................187
Метод invokeAll ................................................................................................188
Метод InvokeAny .............................................................................................190
Отвергнутые задачи ................................................................................................191
ExecutorCompletionService ...........................................................................................191
Резюме .................................................................................................................................194

Глава.10..Связывание.фоновой.задачи.с.UI-потоком..
с.помощью.AsyncTask...............................................196
Основы использования класса AsyncTask ...............................................................196
Создание и начало работы ....................................................................................199
Отмена .........................................................................................................................200
Состояния ...................................................................................................................202
Пример: ограничение режима выполнения AsyncTask только  
одной задачей в любой момент времени .................................................203
Реализация AsyncTask ....................................................................................................203
Пример: загрузка изображений ..........................................................................204
Выполнение задачи в фоновом режиме ...................................................................207
Глобальная среда выполнения в приложении ...............................................209
Выполнение в разных версиях платформы ....................................................211
Настраиваемое выполнение .................................................................................213
Пример: неглобальное последовательное выполнение ......................213
Альтернативы AsyncTask ...............................................................................................214
Случаи излишне упрощённой реализации AsyncTask................................215
Фоновые задачи, для которых требуется объект Looper ...........................216
Локальная служба ...................................................................................................216
Использование метода execute(Runnable) ......................................................216
Резюме .................................................................................................................................217

Глава.11..Службы....................................................218
Причины использования служб для асинхронного выполнения ...................218
Локальные, удалённые и глобальные службы .......................................................220
Создание и выполнение .................................................................................................222
Жизненный цикл .............................................................................................................223
Запускаемая служба ........................................................................................................226
Реализация метода onStartCommand ...............................................................226
Повторный запуск ...................................................................................................227
Служба, управляемая пользователем ...............................................................230

Доступ онлайн
559 ₽
В корзину