Найти тему
CI/CD
Еще посты об IT - https://t.me/it_bd CI — Continuous Integration — автоматика, которая собирает и проверяет на качество ваше приложение CD — Continuous Delivery — автоматика, которая доставляет собранное приложение до юзера Например, мобильное приложение на Android 1...
1 год назад
Фильтры Throttling VS Debounce
Еще посты об IT в ИТ БД → https://t.me/it_bd Оба этих фильтра используются для того, чтобы не дублировать события Например, пользователь злостно и быстро кликает на кнопку "Обновить" десять раз подряд Но нам достаточно сделать один запрос к беку вместо десяти, чтобы получить актуальное значение В этом случае нужно отфильтровать лишние события, то есть пропустить лишние клики, обработав лишь 1 событие И тут есть два подхода: • Throttling — пропускает первое событие и игнорирует...
1 год назад
Java & Kotlin - Порядок инициализации полей, конструкторов и блоков
Рассмотрим самый сложный пример — представим, что у нас есть наследование, статика, конструкторы и поля (+ companion object, + init) Порядок инициализации в Java и Kotlin немного различны, хотя и схожи по общей идее Java: Статические и нестатические поля и блоки инициализируются в порядке объявления (чем выше строчка, тем первее она будет инициализирована) 1. Статические поля и блоки родителя 2. Статические поля и блоки ребенка 3. Нестатические поля и блоки родителя 4. Конструктор родителя 5...
312 читали · 1 год назад
Навигация через диплинки
В некоторых приложениях навигация между экранами осуществляется через диплинки, а не хардкодится в приложении xml-графом или просто кодом Теоретические описание: открываешь ссылку — открывается страница в приложении Практическое описание: в манифесте описываются диплинки, которые собирается перехватывать приложение через Intent их получает Activity и выбирает Fragment, который нужно открыть Плюсы подхода: • гибкость не нужна хардкодить, какой экран открывает кнопка. можно прислать с бека...
1 год назад
.aab (.AAB) — что и зачем
.aab (.AAB) — что и зачем как и .apk, новый формат .aab - это архив, содержащий все файлы (код, ресурсы) приложения разница следующая: — если вы отдаете в плей маркет .apk, то пользователю придется скачать этот файл со всеми ресурсами, включая те, которые на его устройстве использоваться не будут например, вы в ресурсы положили картинку в шести разрешениях (mdpi, hdpi, xhdpi...). а у пользователя разрешение hdpi, но скачать ему придется все 6 картинок, и только потом телефон сможет удалить лишнее — если отдаете ...
1 год назад
Чек-лист профессионального программиста
Это свод правил, выработанный за годы фриланса Когда соблюдаю их, приложение получается удобным для юзера Да, этот список не сделает из вас сеньора, как и не делает им меня. Но это как с мужем-на-час, который не только починил кран, но и убрал за собой рабочее место — сразу видно, крутой • сортировать списки если список выводится пользователю, нужно не забыть понятную сортировку - по дате создания или алфавиту, если нет других заданных параметров • проверять нули, пустые строки и нуллы, количество элементов в списке продумайте, что увидит юзер...
403 читали · 1 год назад
Kotlin Flow: StateFlow vs SharedFlow Часть №2
Общее для StateFlow и SharedFlow: • это горячие потоки то есть вызов collect() лишь позволяет собрать данные, которые уже в них есть или поступят в них, но не запускает выполнение какого-либо билдера (как это происходит с холодными потоками) • они не отслеживает жизненный цикл активити\фрагмента\вьюшки но их можно запустить в корутинах, которые автоматически остановятся во время вызова onStop(). остановка \корутины вызывает остановку выполнения collect() Отличия StateFlow и SharedFlow: •...
203 читали · 1 год назад
Kotlin Flow: StateFlow vs SharedFlow Часть №1
Сначала общие факты для понимания задумки авторов библиотеки Kotlin Flow: • Flow (потоки) — никак не связаны с Android это библиотека котлина, которая завязано только на корутины (которые тоже являются библиотекой, не связанной с Android SDK) • основные методы: collect() - подписаться на данные из потока emit() - положить значение в поток • холодный поток — запускает создание элементов каждый раз при вызове collect() при объявление потока описывается функция-билдер новых элементов, внутри...
1 год назад
Android - Density vs Resolution vs dp vs sp vs dpi
Screen Resolution == Разрешение экрана количество пикселей например, 320х680 Screen Density == dpi (dots per inch) == ppi (pixels per inch) == Количество пикселей/точек на дюйм == Плотность == resources.displayMetrics.densityDpi обычно мы создаем ресурсы и распихиваем их по папочкам: ldpi < mdpi < hdpi, xhdpi, xxhdpi, xxxhdpi • mdpi (medium dpi = 160 dpi) — эта плотность принята за базовую, относительно нее будут вычисляться коэффициенты для масштабирования 1 dp = 1 px при densityDpi = mdpi • ldpi...
111 читали · 1 год назад
Kotlin — вложенные и внутренние классы
Кроме наследования, есть два типа отношений между классами: • вложенные (nested) class A { class B } создать экземпляр класса B: A.B() зачем: выделить часть функционала класса A, используемый только с классом A, в отдельный класс B • внутренние (inner) class A { inner class B } создать экземпляр класса B: A().B() зачем: аналогично вложенному, но при этом функционал, выделенный в класс B, зависит от полей класса A Отличия: вложенный класс не связан с экземпляром внешнего — они создаются...
1 год назад
Многопоточность за 100 слов
Проблема: есть объект запускаем два потока у каждого потока свой кэш, то есть каждый поток создает копию этого объекта, а не работает с ним напрямую дальше по шагам: 1) первый поток скопировал объект к себе в кэш 2) первый поток изменил поле объекта 3) второй поток скопировал объект к себе в кэш 4) второй поток изменяет это же поле (и не знает об изменениях, сделанных первым потоком!) 5) второй поток записывает изменения в общую память 6) первый поток записывает изменения в общую память бац — мы потеряли изменения, сделанные во втором потоке...
101 читали · 1 год назад
Animation — сколько нужно классов, чтобы красиво переместить вьюшку?
Глоссарий • интерполятор — функция, описывающая изменение значения во времени например, значение может изменяться линейно или по экспоненте • pivotX, pivotY — координата точки внутри View, относительно которой будет применена анимация (например, вращение) Как можно сделать анимацию • ValueAnimator — задаем начальное и конечное значение числа, назначаем интерполятор, вешаем колбек, получаем значение каждые n миллисекунд, делаем с ним что хотим • ObjectAnimator — то же самое, что и ValueAnimator,...
1 год назад