Blog about Android
-
Зачем нужен Job? Что такое SupervisorJob?
Job — это объект—дескриптор для корутины, который управляет её жизненным циклом. Job производная от CoroutineContext, которую мы вставлять в CoroutineScope. Job позволяет: Для лучшего запоминания суть работы Job-а, можно сравнить с номером заказа в ресторане. По не нему можно проверить, готов ли заказ, можно отменить или получить заказ. Все дочерние Job автоматически привязываются к родителю.…
-
Что такое CoroutineScope? Какие виды знаешь?
CoroutineScope — это контекст выполнения корутин, объединяющая их в одну иерархию. То есть сущность, в которой происходит Структурированная асинхронность. Для легкости понимания её можно сравнить с Android Activity: наши асинхронные вызовы будут выполнятся в рамках CoroutineScope, так же как наши вьюшки(Textview, Button, LieneаrLayout и др.) существуют в рамках одной Activity. Если CoroutineScope отменяется(закрывается), то все…
-
Как Coroutine работают внутри, чем отличаются от потоков?
Основная идея в том, что Coroutine это НЕ(!) про многопоточность, а про асинхронность. А если быть точнее, то про Структурированную асинхроннсть. То есть мы можем выполнять код на одном потоке(даже на MainThread-e) и получать результат не блокируя поток(т.е. Асинхронно) и в том порядке(т.е. Структурированно), который описан наш асинхронный блок кода.
-
Основные интерфейсы коллекций в Kotlin-е
В Kotlin (особенно в JVM-ориентированных проектах, таких как Android), основные коллекции строятся поверх Java Collection Framework, но Kotlin добавляет расширения, безопасный синтаксис и функциональный стиль. Основные интерфейсы коллекций в Kotlin Интерфейс Назначение Пример реализации Collection<T> Базовый интерфейс для всех коллекций List, Set, MutableList List<T> Упорядоченная коллекция с доступом по индексу listOf(1, 2, 3) Set<T> Уникальные…
-
Kotlin Contracts зачем нужны? Где использовать?
Contracts в Kotlin — это способ сообщить компилятору о свойствах функции, которые нельзя выразить типами. Обычно это: Зачем нужны Kotlin Contracts? Пример 1: Smart cast без контракта Компилятор не знает, что isString(x)==true, то есть x точно String. Пример 2: С контрактом
-
Какая польза от typealias? Во что он компилируется?
typealias в Kotlin это просто псевдоним для типа.Он не создаёт новый тип, а даёт другое имя уже существующему. Польза от typealias Польза Пример Повышение читаемости Username вместо String, Handler вместо (Int, String) -> Unit Переименование длинных типов Map<String, List<Pair<Int, String>>> → typealias UserMap = … Упрощение внедрения API Поддержка устаревшего/внешнего имени, не меняя реальный тип…
-
Extension в котлине, как работают? Можно ли сделать extension к интерфейсу?
Extension-функции — одна из фишек Kotlin, дающая синтаксический сахар. Это способ «добавить» новую функцию существующему типу без наследования или декоратора. Как работают extension-функции под капотом? Это обычные статические функции, которым компилятор даёт особый синтаксис. То есть: Можно ли делать extension к интерфейсу? Да, можно! Но важно: если объект реализует интерфейс, и ты вызываешь extension —…
-
Делегаты в 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!) Что ещё можно указать? Элемент…