Эффективное использование потоков в операционной системе Android
Покупка
Издательство:
ДМК Пресс
Автор:
Ёранссон Андерс
Перевод:
Снастин А. В.
Год издания: 2015
Кол-во страниц: 304
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-168-6
Артикул: 712462.01.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 Москва, 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
К покупке доступен более свежий выпуск
Перейти