Эффективное использование потоков в операционной системе Android
Покупка
Издательство:
ДМК Пресс
Автор:
Ёранссон Андерс
Перевод:
Снастин А. В.
Год издания: 2018
Кол-во страниц: 312
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-97060-182-2
Артикул: 712462.02.99
Чтобы написать действительно полезное и удобное приложение для Android, то без многопоточности никак не обойтись, но как узнать о технологиях и методиках, которые помогут решить такую задачу? Книга с практической точки зрения описывает несколько асинхронных механизмов, доступных в программной среде Android SDK, а также рассматривает основные принципы и правила выбора одного из этих них, лучше всего подходящего для создаваемого приложения. Издание предназначено для программистов разной квалификации, уже работающих под Android и желающих улучшить качество создаваемых программ.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Эффективное использование потоков в операционной системе 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