Blog about Android

  • Делегаты в Kotlin-е. Какие бывают, зачем нужны?

    Делегаты в Kotlin — мощный инструмент, который позволяет переопределить поведение геттера/сеттера, вынести повторяющуюся логику, и писать более декларативный, читаемый код. Делегирование свойства — это когда мы передаём логику get() и set() специальному объекту.В Kotlin это делается с помощью ключевого слова by. Какие бывают делегаты в Kotlin? Делегат Назначение lazy { … } Вычисляется один раз…

  • init{} в Kotlin это аналог чего в Java?

    init {} в Kotlin — это блок инициализации, и его аналог в Java — это инициализатор экземпляра (instance initializer block). Пример Kotlin: Аналог в Java: Обрати внимание: Как работает? Этап Kotlin (init {}) Java Когда выполняется при вызове primary constructor перед телом конструктора Может быть несколько? Да, выполняются в порядке объявления Да Можно использовать параметры…

  • Sealed class в Kotlin-е — что такое, зачем нужны? Можно ли наследовать один от другого? В чем отличие от Sealed interface?

    Sealed class — это класс, у которого жестко ограничен список подклассов. Все наследники должны быть объявлены в том же файле, что и сам sealed class. Зачем нужны? Можно ли наследовать один sealed от другого? Один sealed class может наследовать другую, но: Sealed interface — что это такое? Добавлено в Kotlin 1.5+ Похож на sealed class,…

  • Sequence в Kotlin-е. Зачем нужны, как работают?

    Sequence в Kotlin — это инструмент ленивой (lazy) обработки коллекций. Sequence — это ленивая коллекция: элементы вычисляются по мере запроса, а не все сразу. Как работает? Зачем использовать Sequence? Проблема обычных коллекций Решение через Sequence map().filter().take() создают новые списки на каждый шаг Sequence делает это лениво — один проход Большой объём данных → много аллокаций…

  • Расскажи про структуру manifest файла, что в нем обязательно прописывать?

    Что обязательно в манифесте? Элемент Обязательно? Зачем нужен <manifest> Да Корневой элемент, содержит package xmlns:android Да Пространство имён для атрибутов android: <application> Да Определяет само приложение (иконка, тема, компоненты и т.д.) <activity> Только если ты запускаешь UI, иначе опционально <uses-sdk> Но очень желательно (иначе значения по умолчанию: minSdk = 1!) Что ещё можно указать? Элемент…

  • Handler, Looper, MessageQueue, Message — что такое, как работают?

    Handler, Looper, MessageQueue, Message — это основа внутренней работы UI-потока Android, и этот вопрос проверяет понимание асинхронности, очередей, многопоточности. На сам вопрос довольно таки сложно ответить коротко. Это тема для большой статьи(-ей), которые есть на этом ресурсе. Здесь изложу вкратце. Компонент Назначение Looper Запускает цикл обработки сообщений (loop()) MessageQueue Хранит Message-и, которые ждут обработки Handler…

  • Что такое Nothing в Kotlin-е, зачем нужен?

    Nothing — это специальный bottom type в Kotlin. То есть: тип, у которого нет ни одного значения. Ни один объект не может быть экземпляром Nothing. Nothing — это тип, который представляет код, который никогда не завершится успешно (т.е. никогда не вернёт управление). Позволяет выразить невозможность возврата

  • IPC. Межпроцессное взаимодействие, AIDL

    IPC (Inter-Process Communication) — это способ, с помощью которого два разных процесса обмениваются данными.Это критично, потому что: Примеры IPC в Android Где используется Пример Системные сервисы LocationManager, NotificationManager Между приложениями Приложение <=> Сервис другого приложения AIDL-сервисы Платёжные SDK, медиа-сервисы Binder Основной механизм передачи данных Механизм: Android Binder Вся IPC в Android работает через Binder —…

  • Что такое apk и что в него входит

    APK (Android Package) — это обычный архив в формате ZIP, содержащий всё необходимое для установки Android-приложения на устройство: Структура .apk файла Вот что обычно входит в APK: app.apk├── AndroidManifest.xml├── classes.dex├── lib/│ └── armeabi-v7a/libnative.so├── res/│ └── drawable/…├── assets/│ └── raw_data.json├── resources.arsc├── META-INF/│ ├── CERT.RSA│ ├── CERT.SF│ └── MANIFEST.MF Подробности по каждому элементу Файл / Каталог Назначение…

  • Отличия ART от Dalvik

    Что такое Dalvik и ART? Dalvik ART (Android Runtime) Использовался До Android 4.4 (по умолчанию) С Android 5.0+ (Lollipop) Тип Интерпретатор + JIT AOT-компилятор + JIT (новый) Цель Выполнять .dex-байткод Тоже .dex, но быстрее и эффективнее Ключевые отличия 1. Компиляция: JIT vs AOT Dalvik ART JIT (Just-In-Time) Только JIT JIT, но в сочетании с AOT…

  • Приоритетность процессов в андроиде

    Android даёт каждому процессу приоритет: Приоритет Кто Убивается в последнюю очередь Foreground UI, активные Activity/Service В последнюю очередь Visible View partially visible В последнюю очередь Service Фоновый Service В последнюю очередь Cached / Empty Задние Activity, idle процессы В первую очередь

  • WorkManager — зачем нужен и как используется?

    Ответ: WorkManager — это API для выполнения фоновых задач, которые: Когда использовать WorkManager? Сценарий Использовать WorkManager? Синхронизация данных в фоновом режиме Да Отправка логов / статистики ночью Да Загрузка медиафайлов только по Wi-Fi Да One-time задача при следующем запуске Да Точное выполнение в конкретное время Лучше AlarmManager Реальное время (медиа, шагомер и т.п.) ForegroundService Как…