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

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

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

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

Efficient Android 
Threading

Anders Gо..ransson

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

Москва, 2015

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

УДК 004.451.9Android:004.451.2
ББК 32.972.11
 
Е69

 
 
Ёранссон А.

Е69 
Эффективное использование потоков в операционной системе
Android / пер. с англ. А. В. Снастина. – М.: ДМК Пресс, 2015. –
304 с.: ил.

ISBN 978-5-97060-168-6

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

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

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

 
УДК 004.451.9Android:004.451.2
 
ББК 32.972.11

© 2015 DMK Press
Authorized Russian translation of the English edition of Efficient Android

Threading, ISBN 9781449364137 © 2014 Anders Gо..ransson

This translation is published and sold by permission of O’Reilly Media, Inc.,

which owns or controls all rights to publish and sell the same.

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

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

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

ISBN 978-5-97060-168-6 (рус.)
© Оформление, перевод, ДМК Пресс, 2015

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

Содержание

Предисловие ...........................................................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

К покупке доступен более свежий выпуск Перейти