7. Android-разработка. Архитектура Android OS | Технострим
7. Android-разработка. Архитектура Android OS | Технострим
https://www.youtube.com/watch?v=z8qU03EPcCI
00:04 Введение в архитектуру Android
• Обсуждение важности понимания архитектуры Android для поиска и устранения проблем в приложениях.
• Упоминание о том, что большая часть времени, проводимого на работе, уходит на поиск и устранение багов.
08:30 Основные компоненты Android
• Обсуждение четырех основных компонентов Android: активити, сервис, контент-провайдер и ресивер.
• Обсуждение задач, которые могут быть выполнены в фоновом режиме, и необходимости использования сервисов для этого.
10:58 Примеры использования компонентов Android
• Обсуждение примера использования сервиса для выполнения фоновых задач.
• Обсуждение важности понимания архитектуры Android для проектирования и разработки приложений.
13:01 Глобальный поиск в Android Studio
• В видео автор демонстрирует использование функции "коммент шифта" в Android Studio для глобального поиска по всем функциям.
• Он объясняет, что эта функция может быть полезна, когда нужно увеличить размер шрифта, но не знает, где это искать.
14:42 Настройка и использование функции
• Автор пробует различные настройки, чтобы найти нужную функцию, но не находит успеха.
• Он решает попробовать создать новый проект и добавить в него новый класс, чтобы проверить, как работает функция.
16:16 Создание нового проекта и добавление класса
• Автор создает новый проект и добавляет класс, используя функцию "старт ворк".
• Он объясняет, что функция "коммент шифта" может быть полезна для проверки документации и понимания работы функций.
19:52 Обсуждение ограничений и ограничений Android
• Автор обсуждает ограничения, которые Google накладывает на разработчиков, и как они пытаются компенсировать это, предоставляя возможности для выполнения определенных задач.
• Он приводит пример сервиса Google "джоб шедлер", который был анонсирован как очень полезный, но на самом деле оказался с критическими багами и не использовался.
• Обсуждение работы с сервисами в Android, их назначение и использование.
• Упоминается, что сервисы могут быть использованы для сохранения состояния потока и продолжения работы после закрытия приложения.
• Обсуждение использования медиаплеера и медиатрека для проигрывания музыки.
• Указывается на сложность и боль разработки под Android, особенно в случае использования медиаплеера.
31:08 Контент-провайдеры и браткаст-ресиверы
• Обсуждение контент-провайдеров и браткаст-ресиверов, их назначение и использование для общения между приложениями.
• Упоминается, что контент-провайдеры могут быть использованы для предоставления данных, но не обязательно должны содержать базу данных.
• В видео обсуждается процесс запуска приложения на Android.
• Упоминается класс "активити тред", который запускает все активы приложения.
• Этот класс не находится в исходном коде, но его можно найти в Android Open Source Project.
37:14 Понимание работы системы
• Обсуждается путаница между потоками, процессами и переменными в Android.
• Объясняется, что операционная система не может повредить данные приложения, так как все системные сервисы и процессы работают отдельно.
• Приводится пример, как можно повредить систему, показывая оповещения в шторке.
• Упоминается метод "от тач бейс контекст", который вызывается перед инициализацией класса.
• Этот метод важен для переопределения методов, которые влияют на все приложение.
44:36 Мультидекс и его ограничения
• Обсуждение знаменитого высказывания Билла Гейтса о том, что 4 килобайта достаточно для всех, и сравнение с 65 тысячами методов, которые Андроид считает достаточным для всех.
• Объяснение, что Андроид изначально был заточен под 65 тысяч методов, но столкнулся с ограничениями из-за роста приложений.
• Демонстрация работы с мультидексом, где статический инициализатор работает быстрее, чем в обычном приложении.
• Обсуждение гипотезы о том, что если во всех методах вывести их названия, то при нажатии кнопки "Холм" приложение будет полностью убито.
53:36 Сейф стейт и восстановление контекста
• Объяснение, что сейф стейт используется для сохранения состояния приложения, чтобы оно могло быть восстановлено при изменении типа рекомендации.
• Обсуждение того, что сейф стейт может быть использован для восстановления контекста, но не всегда, и что время жизни процесса не связано с временем жизни компонентов.
59:49 Использование бэкграунд процесса
• Обсуждение использования бэкграунд процесса для ограничения количества процессов, которые могут работать.
• Пример использования бэкграунд процесса для ограничения количества процессов в приложении.
01:08:15 Передача данных между активити
• Обсуждение передачи данных между активити с использованием статических полей и интентов.
• Обсуждение ограничений и недостатков использования статических полей и интентов для передачи данных.
01:11:07 Использование статических полей для передачи данных
• Пример использования статических полей для передачи данных между активити.
• Обсуждение преимуществ использования статических полей для передачи данных по сравнению с использованием интентов.
01:14:39 Проблемы с передачей данных между активити
• В Android, передача данных между активити может быть медленной из-за необходимости доступа к статическим полям.
• Проблемы с удалением данных из базы данных, так как процесс может быть убит в любой момент.
01:23:12 Интенты и их использование
• Интенты используются для запуска других компонентов, включая интенты, связанные с операционной системой Android.
• Интенты могут быть использованы для запуска других компонентов через операционную систему Android.
• Таски - это важная, но сложная и негибкая концепция в разработке Android.
• В современных разработках стараются избегать использования тасок.
• В видео обсуждается, как активити могут быть "наложены" друг на друга или происходить разные вещи при переходе между ними.
• Упоминается статья, которая подробно описывает этот процесс.
01:30:00 Анимации и передача данных
• Обсуждаются различные анимации, которые могут происходить при переходе между активити, и как они могут быть использованы для улучшения пользовательского опыта.
• Упоминаются флаги, которые могут быть использованы для управления анимацией и передачи данных между компонентами.
• Сервисы используются для повышения приоритета процесса, что позволяет избежать его убийства операционной системой.
• В видео демонстрируется создание собственного сервиса и его использование в приложении.
• В видео обсуждаются два способа работы с сервисами: запуск сервиса и возврат флага старт-стик.
• Запуск сервиса продлевает время работы приложения, но если операционная система решит убить приложение, то вся история закончится.
• Если сервис возвращает флаг старт-стик, то операционная система перезапустит сервис, чтобы завершить работу, которую он не успел сделать.
01:45:46 Взаимодействие с операционной системой
• Сервисы могут быть использованы для общения с операционной системой, например, для отправки интегентов и выполнения работы.
• Сервисы могут быть запущены из активити, но они не привязаны к нему и живут своей собственной жизнью.
• Приоритет процесса сервиса выше, чем у других процессов, но он может быть убит, если операционная система решит сэкономить ресурсы.
01:50:15 Музыкальные приложения и форграунд сервисы
• Музыкальные приложения используют форграунд сервисы для повышения приоритета процесса и видимости для пользователя.
• Это позволяет пользователю быть уверенным, что процесс работает, и не будет убит операционной системой.
• Однако, форграунд сервисы также могут быть убиты, если операционная система решит экономить ресурсы.
• В Android есть два типа сервисов: бэкграунд и форграунд.
• Бэкграунд-сервисы запускаются и работают до тех пор, пока есть хотя бы один клиент, подключенный к ним.
• Форграунд-сервисы работают до тех пор, пока приложение активно.
• В Android есть специальный язык описания интерфейсов (АDL), который используется для общения между компонентами.
02:00:04 Фоновая работа и джоб шедлер
• Фоновые сервисы могут быть использованы для выполнения задач, которые не требуют немедленного ответа пользователя.
• Начиная с Android 8, Google рекомендует использовать джоб шедлер для группировки фоновых задач.
• Джоб шедлер позволяет лучше использовать системные ресурсы и снижает энергопотребление.
• Однако, есть проблемы с использованием джоб шедлера, и Google предлагает использовать специальную библиотеку для обхода этих проблем.
• Браткаст ресиверы - это компоненты, которые могут получать глобальные события, такие как входящие звонки, подключение к сети и т.д.
• Браткаст ресиверы могут быть зарегистрированы в любом процессе, даже если он мертв.
02:07:35 Браткаст-ресиверы и контент-провайдеры
• Браткаст-ресиверы используются для получения широковещательных сообщений от операционной системы.
• Начиная с Android 7, нельзя подписываться на коннективе чейн экшн в манифесте, но можно в рантайме.
• Контент-провайдеры используются для обмена данными между приложениями, но редко используются в реальных проектах.
02:20:14 Девелопер обшинс и дунут кип активитис
• Девелопер обшинс - это класс, который позволяет разработчикам получать информацию о состоянии приложения и его компонентов.
• Дунут кип активитис - это класс, который позволяет приложению сохранять состояние при переходе между активити.
• Рекомендуется включать эту опцию для обеспечения корректной работы приложения в продакшне.
02:22:45 Использование инструментов для оптимизации работы приложений
• Обсуждение использования инструментов для оптимизации работы приложений, таких как "инспектор памяти" и "профайлер".
• "Инспектор памяти" позволяет увидеть, как быстро рисуется каждый кадр в приложении и на каком этапе происходит обработка.
• "Профайлер" помогает определить, почему приложение работает медленно, и оптимизировать его работу.
02:35:42 Использование "стресс-теста" для проверки системных сервисов
• "Стресс-тест" позволяет увидеть, как работают системные сервисы и оптимизировать их работу.
• "Стресс-тест" может подсказать, где оптимизировать работу приложения, если оно начинает тормозить.
02:39:41 Использование "adb" для эмуляции нажатия на экран и запуска сервисов
• "adb" позволяет эмулировать нажатие на экран и запускать различные сервисы.
• "adb" также позволяет получать информацию о системе, включая информацию о том, какие сервисы запущены, сколько батарейки они потребляют и сколько времени занимает рендеринг кадра.