May 17, 2024

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 "джоб шедлер", который был анонсирован как очень полезный, но на самом деле оказался с критическими багами и не использовался.

21:41 Работа с сервисами

• Обсуждение работы с сервисами в Android, их назначение и использование.
• Упоминается, что сервисы могут быть использованы для сохранения состояния потока и продолжения работы после закрытия приложения.

28:04 Медиаплеер и медиатрек

• Обсуждение использования медиаплеера и медиатрека для проигрывания музыки.
• Указывается на сложность и боль разработки под Android, особенно в случае использования медиаплеера.

31:08 Контент-провайдеры и браткаст-ресиверы

• Обсуждение контент-провайдеров и браткаст-ресиверов, их назначение и использование для общения между приложениями.
• Упоминается, что контент-провайдеры могут быть использованы для предоставления данных, но не обязательно должны содержать базу данных.

34:53 Запуск приложения

• В видео обсуждается процесс запуска приложения на Android.
• Упоминается класс "активити тред", который запускает все активы приложения.
• Этот класс не находится в исходном коде, но его можно найти в Android Open Source Project.

37:14 Понимание работы системы

• Обсуждается путаница между потоками, процессами и переменными в Android.
• Объясняется, что операционная система не может повредить данные приложения, так как все системные сервисы и процессы работают отдельно.
• Приводится пример, как можно повредить систему, показывая оповещения в шторке.

43:09 Порядок инициализации

• Упоминается метод "от тач бейс контекст", который вызывается перед инициализацией класса.
• Этот метод важен для переопределения методов, которые влияют на все приложение.

44:36 Мультидекс и его ограничения

• Обсуждение знаменитого высказывания Билла Гейтса о том, что 4 килобайта достаточно для всех, и сравнение с 65 тысячами методов, которые Андроид считает достаточным для всех.
• Объяснение, что Андроид изначально был заточен под 65 тысяч методов, но столкнулся с ограничениями из-за роста приложений.

49:29 Работа с мультидексом

• Демонстрация работы с мультидексом, где статический инициализатор работает быстрее, чем в обычном приложении.
• Обсуждение гипотезы о том, что если во всех методах вывести их названия, то при нажатии кнопки "Холм" приложение будет полностью убито.

53:36 Сейф стейт и восстановление контекста

• Объяснение, что сейф стейт используется для сохранения состояния приложения, чтобы оно могло быть восстановлено при изменении типа рекомендации.
• Обсуждение того, что сейф стейт может быть использован для восстановления контекста, но не всегда, и что время жизни процесса не связано с временем жизни компонентов.

59:49 Использование бэкграунд процесса

• Обсуждение использования бэкграунд процесса для ограничения количества процессов, которые могут работать.
• Пример использования бэкграунд процесса для ограничения количества процессов в приложении.

01:08:15 Передача данных между активити

• Обсуждение передачи данных между активити с использованием статических полей и интентов.
• Обсуждение ограничений и недостатков использования статических полей и интентов для передачи данных.

01:11:07 Использование статических полей для передачи данных

• Пример использования статических полей для передачи данных между активити.
• Обсуждение преимуществ использования статических полей для передачи данных по сравнению с использованием интентов.

01:14:39 Проблемы с передачей данных между активити

• В Android, передача данных между активити может быть медленной из-за необходимости доступа к статическим полям.
• Проблемы с удалением данных из базы данных, так как процесс может быть убит в любой момент.

01:23:12 Интенты и их использование

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

01:25:27 Таски и их сложность

• Таски - это важная, но сложная и негибкая концепция в разработке Android.
• В современных разработках стараются избегать использования тасок.

01:26:12 Навигация и активити

• В видео обсуждается, как активити могут быть "наложены" друг на друга или происходить разные вещи при переходе между ними.
• Упоминается статья, которая подробно описывает этот процесс.

01:30:00 Анимации и передача данных

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

01:35:32 Сервисы и их роль

• Сервисы используются для повышения приоритета процесса, что позволяет избежать его убийства операционной системой.
• В видео демонстрируется создание собственного сервиса и его использование в приложении.

01:39:31 Работа с сервисами

• В видео обсуждаются два способа работы с сервисами: запуск сервиса и возврат флага старт-стик.
• Запуск сервиса продлевает время работы приложения, но если операционная система решит убить приложение, то вся история закончится.
• Если сервис возвращает флаг старт-стик, то операционная система перезапустит сервис, чтобы завершить работу, которую он не успел сделать.

01:45:46 Взаимодействие с операционной системой

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

01:50:15 Музыкальные приложения и форграунд сервисы

• Музыкальные приложения используют форграунд сервисы для повышения приоритета процесса и видимости для пользователя.
• Это позволяет пользователю быть уверенным, что процесс работает, и не будет убит операционной системой.
• Однако, форграунд сервисы также могут быть убиты, если операционная система решит экономить ресурсы.

01:53:15 Работа с сервисами

• В Android есть два типа сервисов: бэкграунд и форграунд.
• Бэкграунд-сервисы запускаются и работают до тех пор, пока есть хотя бы один клиент, подключенный к ним.
• Форграунд-сервисы работают до тех пор, пока приложение активно.
• В Android есть специальный язык описания интерфейсов (АDL), который используется для общения между компонентами.

02:00:04 Фоновая работа и джоб шедлер

• Фоновые сервисы могут быть использованы для выполнения задач, которые не требуют немедленного ответа пользователя.
• Начиная с Android 8, Google рекомендует использовать джоб шедлер для группировки фоновых задач.
• Джоб шедлер позволяет лучше использовать системные ресурсы и снижает энергопотребление.
• Однако, есть проблемы с использованием джоб шедлера, и Google предлагает использовать специальную библиотеку для обхода этих проблем.

02:06:03 Браткаст ресиверы

• Браткаст ресиверы - это компоненты, которые могут получать глобальные события, такие как входящие звонки, подключение к сети и т.д.
• Браткаст ресиверы могут быть зарегистрированы в любом процессе, даже если он мертв.

02:07:35 Браткаст-ресиверы и контент-провайдеры

• Браткаст-ресиверы используются для получения широковещательных сообщений от операционной системы.
• Начиная с Android 7, нельзя подписываться на коннективе чейн экшн в манифесте, но можно в рантайме.
• Контент-провайдеры используются для обмена данными между приложениями, но редко используются в реальных проектах.

02:20:14 Девелопер обшинс и дунут кип активитис

• Девелопер обшинс - это класс, который позволяет разработчикам получать информацию о состоянии приложения и его компонентов.
• Дунут кип активитис - это класс, который позволяет приложению сохранять состояние при переходе между активити.
• Рекомендуется включать эту опцию для обеспечения корректной работы приложения в продакшне.

02:22:45 Использование инструментов для оптимизации работы приложений

• Обсуждение использования инструментов для оптимизации работы приложений, таких как "инспектор памяти" и "профайлер".
• "Инспектор памяти" позволяет увидеть, как быстро рисуется каждый кадр в приложении и на каком этапе происходит обработка.
• "Профайлер" помогает определить, почему приложение работает медленно, и оптимизировать его работу.

02:35:42 Использование "стресс-теста" для проверки системных сервисов

• "Стресс-тест" позволяет увидеть, как работают системные сервисы и оптимизировать их работу.
• "Стресс-тест" может подсказать, где оптимизировать работу приложения, если оно начинает тормозить.

02:39:41 Использование "adb" для эмуляции нажатия на экран и запуска сервисов

• "adb" позволяет эмулировать нажатие на экран и запускать различные сервисы.
• "adb" также позволяет получать информацию о системе, включая информацию о том, какие сервисы запущены, сколько батарейки они потребляют и сколько времени занимает рендеринг кадра.