Avokado Project
#разработка
Ребята из Лаборатории Касперского и Avito решили сделать новый проект для разработчиков, целью которой делиться знаниями, опытом и инструментами. Здорово, что такие большие компании делятся своими наработками с сообществом.
Уже писал вам о фреимворке для написания тестов Kaspresso, который значительно упрощает этот нелегкий процесс. Помимо этого, есть Avito Android Infrastructure, где есть набор всех инструментов для непрерывного тестирования и доставки приложений пользователям.
Дальнейшие шаги для развития — это продолжение работы в автотестировании, а цель — это сделать продукт, который позволит за условные 15 минут развернуть среду для автотестов на любом проекте.
Каждый может присоединиться к проекту. Можно просто следить за обновлениями на сайте, можно присоединиться к чату и накинуть своих идей или проголосовать за уже существующие.
#разработка
Ребята из Лаборатории Касперского и Avito решили сделать новый проект для разработчиков, целью которой делиться знаниями, опытом и инструментами. Здорово, что такие большие компании делятся своими наработками с сообществом.
Уже писал вам о фреимворке для написания тестов Kaspresso, который значительно упрощает этот нелегкий процесс. Помимо этого, есть Avito Android Infrastructure, где есть набор всех инструментов для непрерывного тестирования и доставки приложений пользователям.
Дальнейшие шаги для развития — это продолжение работы в автотестировании, а цель — это сделать продукт, который позволит за условные 15 минут развернуть среду для автотестов на любом проекте.
Каждый может присоединиться к проекту. Можно просто следить за обновлениями на сайте, можно присоединиться к чату и накинуть своих идей или проголосовать за уже существующие.
Layout Inspector
#разработка
Совсем недавно Android Studio 4.0 перешла из стадии beta в стадию stable и принесла нам Layout Inspector. У него есть 3 части:
• Component Tree — покажет вам дерево view, в реальном времени. Подходит для того, чтобы посмотреть, из каких элементов состоит экран в текущий момент времени.
• Inspector — по сути визуальный canvas текущего экрана, отображаемого на эмуляторе или устройстве. Главная фишка — визуализация является интерактивной, поэтому мы можем покликать наши компоненты и проверить различные атрибуты.
• Attributes — позволяет получить подробную информацию о каждом из объектов на экране. Полезно, если мы хотим проверить реальные размеры View на экране или посмотреть, какие у неё отступы относительно других компонентов.
Больше информации об этой крутой фиче можно найти тут.
#разработка
Совсем недавно Android Studio 4.0 перешла из стадии beta в стадию stable и принесла нам Layout Inspector. У него есть 3 части:
• Component Tree — покажет вам дерево view, в реальном времени. Подходит для того, чтобы посмотреть, из каких элементов состоит экран в текущий момент времени.
• Inspector — по сути визуальный canvas текущего экрана, отображаемого на эмуляторе или устройстве. Главная фишка — визуализация является интерактивной, поэтому мы можем покликать наши компоненты и проверить различные атрибуты.
• Attributes — позволяет получить подробную информацию о каждом из объектов на экране. Полезно, если мы хотим проверить реальные размеры View на экране или посмотреть, какие у неё отступы относительно других компонентов.
Больше информации об этой крутой фиче можно найти тут.
Создание приложения Scrum Poker с использованием MotionLayout
#разработка #статьи
Уже не раз писал на канале посты, связанные с MotionLayout и приводил примеры приложений, которые используют этот инструмент.
На этот раз попалась статья, где автор поставил цель написать небольшое приложение для scrum poker, используя минимальное количество строк кода. MotionLayout вот-вот перейдет в релизную стадию, поэтому самое время изучать его основные фишки.
Прочитать статью можно тут. У автора получилась интересная статистика по количеству написанного кода: 81 строчка Kotlin-кода и 230 строк xml-кода. Как по мне, отличные показатели для такого приложения.
#разработка #статьи
Уже не раз писал на канале посты, связанные с MotionLayout и приводил примеры приложений, которые используют этот инструмент.
На этот раз попалась статья, где автор поставил цель написать небольшое приложение для scrum poker, используя минимальное количество строк кода. MotionLayout вот-вот перейдет в релизную стадию, поэтому самое время изучать его основные фишки.
Прочитать статью можно тут. У автора получилась интересная статистика по количеству написанного кода: 81 строчка Kotlin-кода и 230 строк xml-кода. Как по мне, отличные показатели для такого приложения.
Интервью с разработчиком: как стать GDE
#интервью
Наше интервью с Евгением Мацюком и Александром Денисовым опубликовано. Огромное спасибо всем, кто задавал свои вопросы и уверен, что теперь у всех нас есть чуть больше информации о том, как стать GDE.
Ссылка на статью тут, обязательно поддержите её своими лайками и комментариями на Medium😉.
#интервью
Наше интервью с Евгением Мацюком и Александром Денисовым опубликовано. Огромное спасибо всем, кто задавал свои вопросы и уверен, что теперь у всех нас есть чуть больше информации о том, как стать GDE.
Ссылка на статью тут, обязательно поддержите её своими лайками и комментариями на Medium😉.
Medium
Как стать GDE: интервью с Евгением Мацюком и Александром Денисовым
Думаю, что многие из вас слышали про программу GDE (Google Developer Experts) — это технические эксперты и лидеры, которые являются…
Релиз Android 11
#разработка #статьи #комментарии
Вчера вечером, Google сделал обновление Android 11 и выкатил огромное количество обновлений для разработчиков. Среди них:
• Hilt (переводится как «рукоятка» 😄) — рекомендованная библиотека для DI от Google. Она создана на основе Dagger и разработчики обещают лучшую скорость сборки билда и масштабируемость. Здорово, что она полностью интегрирована с существующим Jetpack, появились такие аннотации как
• Paging 3 — обновили библиотеку для постепенной загрузки данных, переписав её на coroutines. Подробнее в документации, версия пока тоже в alpha.
• App Startup — библиотека для инициализации компонентов на старте приложения. Выглядит круто, обещают улучшенную производительность и уменьшенное время старта. Обязательно возьму себе на заметку. Подробности тут.
• Auto-fill IME integrations — API для ввода подсказок при вводе с клавиатуры. В примере показано, как пользователь переходит в поле ввода данных карты, а система предлагает ему на выбор одну из его сохранённых. Как по мне, крутая штука, которая улучшит взаимодействие пользователя с приложением.
• улучшили работу с анимациями, добавив SeekableAnimatedVectorDrawable. Класс расширяет сущесвующие AnimatedVectorDrawable, добавив возможность прокручивать, ставить на паузу и возобновлять анимацию. Кроме этого, Motion Editor уже в 4 версии Android Studio, самое время добавлять анимации в приложение.
• обновления существующих библиотек, таких как Navigation, Workmanager, Permissions. Обновления здоровские, значительно облегчат жизнь нам, разработчикам.
Подробнее о всех обновлениях можно прочитать в этой статье. А также можно посмотреть видео про все эти новинки.
Как вам обновления? Что ждали больше всего? Давайте обсудим в комментариях
#разработка #статьи #комментарии
Вчера вечером, Google сделал обновление Android 11 и выкатил огромное количество обновлений для разработчиков. Среди них:
• Hilt (переводится как «рукоятка» 😄) — рекомендованная библиотека для DI от Google. Она создана на основе Dagger и разработчики обещают лучшую скорость сборки билда и масштабируемость. Здорово, что она полностью интегрирована с существующим Jetpack, появились такие аннотации как
@ViewModelInject
и @AndroidEntryPoint
. Пока библиотека сырая, но можно почитать подробнее тут.• Paging 3 — обновили библиотеку для постепенной загрузки данных, переписав её на coroutines. Подробнее в документации, версия пока тоже в alpha.
• App Startup — библиотека для инициализации компонентов на старте приложения. Выглядит круто, обещают улучшенную производительность и уменьшенное время старта. Обязательно возьму себе на заметку. Подробности тут.
• Auto-fill IME integrations — API для ввода подсказок при вводе с клавиатуры. В примере показано, как пользователь переходит в поле ввода данных карты, а система предлагает ему на выбор одну из его сохранённых. Как по мне, крутая штука, которая улучшит взаимодействие пользователя с приложением.
• улучшили работу с анимациями, добавив SeekableAnimatedVectorDrawable. Класс расширяет сущесвующие AnimatedVectorDrawable, добавив возможность прокручивать, ставить на паузу и возобновлять анимацию. Кроме этого, Motion Editor уже в 4 версии Android Studio, самое время добавлять анимации в приложение.
• обновления существующих библиотек, таких как Navigation, Workmanager, Permissions. Обновления здоровские, значительно облегчат жизнь нам, разработчикам.
Подробнее о всех обновлениях можно прочитать в этой статье. А также можно посмотреть видео про все эти новинки.
Как вам обновления? Что ждали больше всего? Давайте обсудим в комментариях
Podlodka Android Crew
#конференции
Не успела завершиться Podlodka Team Lead Crew, как организаторы решили сделать онлайн конференцию для Android разработчиков — Podlodka Android Crew.
Уже с 22 июня нас ждут 2 недели интенсива от экспертов по современным практикам Android-разработки, куча общения и обмена опытом. Темы недели — это архитектура и оптимизация работы мобильных приложений, что актуально для всех всегда.
Сейчас билет стоит 3400 рублей, что довольно дешево, учитывая цену на обычные конференции разработчиков. Уже 18 июня цена повысится до 3900.
А у вас вновь есть шанс выиграть билет на эту конференцию и постетить её бесплатно. Всё что нужно сделать — это оставить свой ник в Telegram в этой форме и 18 июня в 15:00 мы также рандомно выберем победителя.
Торопитесь прокачать свои навыки! 🤓Ссылка на детальное описание тут.
#конференции
Не успела завершиться Podlodka Team Lead Crew, как организаторы решили сделать онлайн конференцию для Android разработчиков — Podlodka Android Crew.
Уже с 22 июня нас ждут 2 недели интенсива от экспертов по современным практикам Android-разработки, куча общения и обмена опытом. Темы недели — это архитектура и оптимизация работы мобильных приложений, что актуально для всех всегда.
Сейчас билет стоит 3400 рублей, что довольно дешево, учитывая цену на обычные конференции разработчиков. Уже 18 июня цена повысится до 3900.
А у вас вновь есть шанс выиграть билет на эту конференцию и постетить её бесплатно. Всё что нужно сделать — это оставить свой ник в Telegram в этой форме и 18 июня в 15:00 мы также рандомно выберем победителя.
Торопитесь прокачать свои навыки! 🤓Ссылка на детальное описание тут.
Ещё немного про Android 11
#конференции
В мире Android всё быстро меняется. Особенно, когда дело касается мероприятий, связанных с презентацией свежего Android 11. Вроде мы уже знаем, чего нам ожидать от него, но интересно послушать также и комментарии экспертов.
Уже упоминал вам об онлайн-мероприятиях тут. Осталось только актуализировать даты:
1) Просмотр от Android Broadcast, совместно с Android Dev Podcast. Ссылка на трансляцию тут, начало мероприятия завтра 15 июня в 20:00 по МСК.
2) Просмотр от GDG Russia совместно с Google. Ссылка на трансляцию тут, начало мероприятия в среду, 17 июня в 19:00 по МСК. Надежные источники подтвердили, что на этой трансляции будет приглашенный гость — сам Chet Haase! 😎
Кроме того, у каждого присутствующего будет возможность поучаствовать в квизе и выиграть фирменные штуки от организаторов.
Локальным мероприятиям от GDG также быть, обязательно следи за анонсами! 🤓
#конференции
В мире Android всё быстро меняется. Особенно, когда дело касается мероприятий, связанных с презентацией свежего Android 11. Вроде мы уже знаем, чего нам ожидать от него, но интересно послушать также и комментарии экспертов.
Уже упоминал вам об онлайн-мероприятиях тут. Осталось только актуализировать даты:
1) Просмотр от Android Broadcast, совместно с Android Dev Podcast. Ссылка на трансляцию тут, начало мероприятия завтра 15 июня в 20:00 по МСК.
2) Просмотр от GDG Russia совместно с Google. Ссылка на трансляцию тут, начало мероприятия в среду, 17 июня в 19:00 по МСК. Надежные источники подтвердили, что на этой трансляции будет приглашенный гость — сам Chet Haase! 😎
Кроме того, у каждого присутствующего будет возможность поучаствовать в квизе и выиграть фирменные штуки от организаторов.
Локальным мероприятиям от GDG также быть, обязательно следи за анонсами! 🤓
Удалённое логирование с Timber и Firebase Realtime Database
#статьи #разработка
Думаю, что никому не нужно объяснять, насколько важно логирование при разработке. Встроенный в Android SDK инструмент — Log неплох, но главная проблема в том, что нам нужно каждый раз подставлять тег в первый параметр.
В качестве альтернативы есть библиотека Timber, которая расширяет стандартную библиотеку и теперь нам не нужно подставлять тег в качестве параметра, а что более важно — мы можем сделать разные деревья для настройки логирования в разных конфигурациях приложения.
Но если нам нужно сделать удаленное логирование? Когда у нас есть устройство рядом, то никаких проблем нет. Но если это устройство не рядом, то проверить логи — отдельная задача.
Интересная связка для удалённого тестирования описана тут. Автор описывает то, как создать отдельное дерево для записи логов в Firebase Realtime Database, получая логи удалённо, лежащими в базе данных.
Получилось довольно удобно, на мой взгляд это отлично подходит для тестовых устройств, но не уверен, что годится, если вы хотите что-то логировать в prod.
#статьи #разработка
Думаю, что никому не нужно объяснять, насколько важно логирование при разработке. Встроенный в Android SDK инструмент — Log неплох, но главная проблема в том, что нам нужно каждый раз подставлять тег в первый параметр.
В качестве альтернативы есть библиотека Timber, которая расширяет стандартную библиотеку и теперь нам не нужно подставлять тег в качестве параметра, а что более важно — мы можем сделать разные деревья для настройки логирования в разных конфигурациях приложения.
Но если нам нужно сделать удаленное логирование? Когда у нас есть устройство рядом, то никаких проблем нет. Но если это устройство не рядом, то проверить логи — отдельная задача.
Интересная связка для удалённого тестирования описана тут. Автор описывает то, как создать отдельное дерево для записи логов в Firebase Realtime Database, получая логи удалённо, лежащими в базе данных.
Получилось довольно удобно, на мой взгляд это отлично подходит для тестовых устройств, но не уверен, что годится, если вы хотите что-то логировать в prod.
Android 11: что нового?
#конференции
Мы уже видели с вами как минимум 2 конференции, связанные с Android 11, где были обзорно рассмотрены большинство нововведений. Сейчас самое время углубиться в то, что нам принесли эти обновления.
И я буду очень рад вашему участию в мероприятии, где буду одним из ведущих.
Оно состоится 20 июня в 12:00 по Москве. Всего будет три эксперта, которые рассмотрят некоторые из фишек, описанных в нововведениях Android 11.
Мероприятие проводят, совместно, GDG Bryansk и GDG Kaluga.
Эксперты:
• Федор Цымбал – работает архитектором в MERA 11 лет. Последние 5 лет занимается разработкой Android Board Support Package (BSP) для микроэлектронного производства. За это время Фёдор получил много опыта работы на разных версиях Android.
Расскажет нам об изменениях в Privacy.
• Иван Баранов – разработчик под Android с суммарным опытом более 8 лет. Участвовал в написании различных проектов, последние несколько лет пишет защищённый мессенджер.
Расскажет, что появилось нового в Insets и анимациях клавиатуры.
• Инесса Бухонова – 7 лет в Android разработке, помогает делать Android академию СПб, выступала на самых первых GDG в далёком 2013.
Будет выступать с темой Bubbles overview
Продолжительность мероприятия — 2 часа и я уверен, что это будет полезно всем нам. Зарегистрироваться нужно тут. Увидимся! 😎
#конференции
Мы уже видели с вами как минимум 2 конференции, связанные с Android 11, где были обзорно рассмотрены большинство нововведений. Сейчас самое время углубиться в то, что нам принесли эти обновления.
И я буду очень рад вашему участию в мероприятии, где буду одним из ведущих.
Оно состоится 20 июня в 12:00 по Москве. Всего будет три эксперта, которые рассмотрят некоторые из фишек, описанных в нововведениях Android 11.
Мероприятие проводят, совместно, GDG Bryansk и GDG Kaluga.
Эксперты:
• Федор Цымбал – работает архитектором в MERA 11 лет. Последние 5 лет занимается разработкой Android Board Support Package (BSP) для микроэлектронного производства. За это время Фёдор получил много опыта работы на разных версиях Android.
Расскажет нам об изменениях в Privacy.
• Иван Баранов – разработчик под Android с суммарным опытом более 8 лет. Участвовал в написании различных проектов, последние несколько лет пишет защищённый мессенджер.
Расскажет, что появилось нового в Insets и анимациях клавиатуры.
• Инесса Бухонова – 7 лет в Android разработке, помогает делать Android академию СПб, выступала на самых первых GDG в далёком 2013.
Будет выступать с темой Bubbles overview
Продолжительность мероприятия — 2 часа и я уверен, что это будет полезно всем нам. Зарегистрироваться нужно тут. Увидимся! 😎
Создание Twitter splash-screen с использованием MotionLayout
#разработка #дизайн #опрос
Уже не в первый раз пишу вам о возможностях и фишках нового MotionLayout. Последний пост был связан с приложением ScrumPoker, его найдёте тут.
Сегодня ещё один крутой пример. Автор решил написать анимированный Twitter-подобный splash-screen и выбрал самый простой способ — это MotionLayout. Получилось хорошо и количество кода также впечатляет: немногим более 50 строк для MotionScene.
Ссылки на первую и вторую часть статьи тут и тут.
А вы используете MotionLayout у себя в прод-проектах?
#разработка #дизайн #опрос
Уже не в первый раз пишу вам о возможностях и фишках нового MotionLayout. Последний пост был связан с приложением ScrumPoker, его найдёте тут.
Сегодня ещё один крутой пример. Автор решил написать анимированный Twitter-подобный splash-screen и выбрал самый простой способ — это MotionLayout. Получилось хорошо и количество кода также впечатляет: немногим более 50 строк для MotionScene.
Ссылки на первую и вторую часть статьи тут и тут.
А вы используете MotionLayout у себя в прод-проектах?
Результаты конкурса Podlodka Android Crew
#конкурс
Итак, наконец пришло время опубликовать результаты конкурса, описанного тут.
В конкурсе приняло участие 55 человек, при помощи генератора случайных чисел был выбран победитель — @YakovlevAleksey, с чем я его и поздравляю 😎.
Мероприятие стартует 22 июня. Уже известно расписание первой недели, связанной с архитектурой приложений.
Ещё есть шанс присоединиться и получить огромный пласт новых знаний. Ссылка с подробностями здесь.
Видео с выбором победителя тут. До новых конкурсов!
#конкурс
Итак, наконец пришло время опубликовать результаты конкурса, описанного тут.
В конкурсе приняло участие 55 человек, при помощи генератора случайных чисел был выбран победитель — @YakovlevAleksey, с чем я его и поздравляю 😎.
Мероприятие стартует 22 июня. Уже известно расписание первой недели, связанной с архитектурой приложений.
Ещё есть шанс присоединиться и получить огромный пласт новых знаний. Ссылка с подробностями здесь.
Видео с выбором победителя тут. До новых конкурсов!
Android ViewModel. Как это работает
#статьи #разработка
Наиболее популярным решением от Google для взаимодействия между Presenter-слоем и View-слоем — это ViewModel. Самым главным преимуществом является механизм сохранения состояния при пересоздании Fragment или Activity.
И кажется, что внутри намешана какая-то магия. 😯 Но если копнуть, то внутри вы обнаружите самый обычный код, где её (магии) «почти» нет.
Копнуть и разобраться в деталях поможет эта статья.
Начиная от 2017 года, автор копается во внутренностях механизмов ViewModel и рассматривает то, как менялись подходы со временем. Интересно, что в самом начале пути, у ViewModel под капотом использовался retained fragment. 🤓
#статьи #разработка
Наиболее популярным решением от Google для взаимодействия между Presenter-слоем и View-слоем — это ViewModel. Самым главным преимуществом является механизм сохранения состояния при пересоздании Fragment или Activity.
И кажется, что внутри намешана какая-то магия. 😯 Но если копнуть, то внутри вы обнаружите самый обычный код, где её (магии) «почти» нет.
Копнуть и разобраться в деталях поможет эта статья.
Начиная от 2017 года, автор копается во внутренностях механизмов ViewModel и рассматривает то, как менялись подходы со временем. Интересно, что в самом начале пути, у ViewModel под капотом использовался retained fragment. 🤓
Друзья, я решил ввести на канале новую рубрику — тестовые задачи по Android. Подобные тесты часто бывают для отсеивания кандидатов на интервью, а также на конференциях.
Итак, начнём с простого задания! 🤓
Итак, начнём с простого задания! 🤓
Для создания фичи, вам нужно использовать структуру данных «ключ-значение».
Вы знаете, что ключом всегда будет являться int и хотите оптимизировать использование памяти.
Какую структуру данных выберите?
Вы знаете, что ключом всегда будет являться int и хотите оптимизировать использование памяти.
Какую структуру данных выберите?
Anonymous Quiz
32%
HashMap
14%
ArrayMap
4%
TreeSet
44%
SparseArray
7%
HashSet
Комментарии к квизу
#quiz
Правильных ответов не так много. Поэтому, после каждого квиза будет пост с описанием, почему правильный ответ является правильным.
• HashMap — это структура данных, которая основана на хэш-таблицах. Она реализует интерфейс Map, и это подразумевает хранение в ней пар «ключ-значение». Ключи и значения могут быть любыми типами (Object), в том числе и null (что тоже является распространённым вопросом на собеседовании). Для разрешения коллизий используется метод цепочек.
В целом, вы можете использовать эту структуру для хранения данных, где ключом является Integer. Но в задаче было уточнение — эффективное использование памяти.
• ArrayMap — это также структура данных, которая позволяет хранить пары «ключ-значение». С некоторой стороны — это более эффективная по памяти замена HashMap: тут вместо одного большого массива значений, используется два массива, где первый хранит хэши ключей в сортированном порядке, а второй — ключи и значения в соответствии с этим порядком. Коллизии решаются тут методом цепочек.
Однако, получение объекта выполняется медленнее: в отличии от HashMap, где поиск выполняется при помощи получения элемента по хэш-функции, в ArrayMap поиск элемента выполняется бинарным поиском.
Но с точки зрения эффективности памяти эта структура лучше, чем HashMap.
• SparseArray — очень похожая на ArrayMap структура. Но её главным отличием является то, что ключами в ней являются примитивные типы, которые занимают ещё меньше памяти и не выполняется операции boxing/unboxing.
С точки зрения получения объектов, результат похож на ArrayMap. Но эта структура наиболее эффективна по памяти, когда вашими ключами является тип int.
У неё также есть «братья»: SparseLongArray, SparseIntArray, SparseBooleanArray, где ключами являются соотвествующие примитивы.
• HashSet и TreeSet вовсе не созданы для того, чтобы хранить пары «ключ-значение».
В целом, если ваша задача состоит в хранении небольшого количества элементов (<1000) или у вас не много операций поиска элементов, то стоит присмотреться к альтернативам HashMap. Пара классных и коротких видео про эти структуры тут и тут.
Как вам вообще тема с квизами? Продолжаем?
#quiz
Правильных ответов не так много. Поэтому, после каждого квиза будет пост с описанием, почему правильный ответ является правильным.
• HashMap — это структура данных, которая основана на хэш-таблицах. Она реализует интерфейс Map, и это подразумевает хранение в ней пар «ключ-значение». Ключи и значения могут быть любыми типами (Object), в том числе и null (что тоже является распространённым вопросом на собеседовании). Для разрешения коллизий используется метод цепочек.
В целом, вы можете использовать эту структуру для хранения данных, где ключом является Integer. Но в задаче было уточнение — эффективное использование памяти.
• ArrayMap — это также структура данных, которая позволяет хранить пары «ключ-значение». С некоторой стороны — это более эффективная по памяти замена HashMap: тут вместо одного большого массива значений, используется два массива, где первый хранит хэши ключей в сортированном порядке, а второй — ключи и значения в соответствии с этим порядком. Коллизии решаются тут методом цепочек.
Однако, получение объекта выполняется медленнее: в отличии от HashMap, где поиск выполняется при помощи получения элемента по хэш-функции, в ArrayMap поиск элемента выполняется бинарным поиском.
Но с точки зрения эффективности памяти эта структура лучше, чем HashMap.
• SparseArray — очень похожая на ArrayMap структура. Но её главным отличием является то, что ключами в ней являются примитивные типы, которые занимают ещё меньше памяти и не выполняется операции boxing/unboxing.
С точки зрения получения объектов, результат похож на ArrayMap. Но эта структура наиболее эффективна по памяти, когда вашими ключами является тип int.
У неё также есть «братья»: SparseLongArray, SparseIntArray, SparseBooleanArray, где ключами являются соотвествующие примитивы.
• HashSet и TreeSet вовсе не созданы для того, чтобы хранить пары «ключ-значение».
В целом, если ваша задача состоит в хранении небольшого количества элементов (<1000) или у вас не много операций поиска элементов, то стоит присмотреться к альтернативам HashMap. Пара классных и коротких видео про эти структуры тут и тут.
Как вам вообще тема с квизами? Продолжаем?
Store от Dropbox
#библиотека
Есть такое мнение, что единственное чем занимаются разработчики мобильных приложений — это выводят на экран то, что приходит с сервера и красят View.
Что же, в этом мнении есть небольшая доля правды, но согласитесь, что сегодняшние приложения — это не тонкий и простой клиент, а полноценное приложение, которое должно работать при любых условиях на множестве девайсах.
Есть приложения, которым для работы обязательно нужен Интернет и без него они превращаются в «тыкву» (или заглушку с сообщением об отсутствии сети). Но если ваше приложение должно работать без сети, то вам как разработчику нужно реализовывать кэш. А в этом может помочь библиотека от Dropbox, которая называется Store.
По факту, это надстройка над источником данных, которая ответственна за получение и кэширование конкретного типа данных. Когда вы создаете Store, вы предоставляете ему
Например:
Библиотека написана на Kotlin, работает с Room, SQLDelight и Realm базами данных. А тут можно почитать немного подробнее о её использовании.
#библиотека
Есть такое мнение, что единственное чем занимаются разработчики мобильных приложений — это выводят на экран то, что приходит с сервера и красят View.
Что же, в этом мнении есть небольшая доля правды, но согласитесь, что сегодняшние приложения — это не тонкий и простой клиент, а полноценное приложение, которое должно работать при любых условиях на множестве девайсах.
Есть приложения, которым для работы обязательно нужен Интернет и без него они превращаются в «тыкву» (или заглушку с сообщением об отсутствии сети). Но если ваше приложение должно работать без сети, то вам как разработчику нужно реализовывать кэш. А в этом может помочь библиотека от Dropbox, которая называется Store.
По факту, это надстройка над источником данных, которая ответственна за получение и кэширование конкретного типа данных. Когда вы создаете Store, вы предоставляете ему
Fetcher
— функцию, которая определяет, как данные будут выбираться по сети. Например:
StoreBuilder
.from(
fetcher = Fetcher.of { api.fetchSubreddit(it, "10").data.children.map(::toPosts) },
sourceOfTruth = SourceOfTruth.of(
reader = db.postDao()::loadPosts,
writer = db.postDao()::insertPosts,
delete = db.postDao()::clearFeed,
deleteAll = db.postDao()::clearAllFeeds
)
).build()
Библиотека написана на Kotlin, работает с Room, SQLDelight и Realm базами данных. А тут можно почитать немного подробнее о её использовании.
Комментарии к квизу
#квиз
Знание из последнего квиза таит в себе подводные камни.
Большинство ответило верно: действительно вернётся 2. Но было много ответов 1 (в первый раз ответил именно так)
Все исключения в Kotlin являются наследниками класса Throwable. У каждого исключения есть сообщение, стек, а также причина, по которой это исключение было вызвано.
Соответсвенно, в нашем блоке try появляется исключение, дальше мы переходим в catch, где ловим это исключение. И блок finally выполнится вне зависимости от того, было вызвано исключение или нет. Поэтому, верный ответ 2.
Однако, есть любопытный момент. Если вы используете try как выражение:
То результатом выполнения будет 1. Для меня это было открытием, спасибо бдительным подписчикам @dakarkaret и @amihusb за то, что указали на эту особенность👍.
В документации написано, что при использовании expression (выражения) возвращаемое значение является либо последним выражением в блоке try, либо последним выражением в блоке catch (или блоках) и содержимое блока finally не влияет на результат выражения.
Ссылка на документацию тут.
Будьте аккуратны, когда пишите подобный код!
#квиз
Знание из последнего квиза таит в себе подводные камни.
Большинство ответило верно: действительно вернётся 2. Но было много ответов 1 (в первый раз ответил именно так)
Все исключения в Kotlin являются наследниками класса Throwable. У каждого исключения есть сообщение, стек, а также причина, по которой это исключение было вызвано.
Соответсвенно, в нашем блоке try появляется исключение, дальше мы переходим в catch, где ловим это исключение. И блок finally выполнится вне зависимости от того, было вызвано исключение или нет. Поэтому, верный ответ 2.
Однако, есть любопытный момент. Если вы используете try как выражение:
fun value(): Int =
try {
throw UnsupportedOperationException()
0
}
catch (e: Exception) {
1
}
finally {
2
}
То результатом выполнения будет 1. Для меня это было открытием, спасибо бдительным подписчикам @dakarkaret и @amihusb за то, что указали на эту особенность👍.
В документации написано, что при использовании expression (выражения) возвращаемое значение является либо последним выражением в блоке try, либо последним выражением в блоке catch (или блоках) и содержимое блока finally не влияет на результат выражения.
Ссылка на документацию тут.
Будьте аккуратны, когда пишите подобный код!
Темы или стили?
#разработка #статьи
В Android существует система стилей, которую многие разработчики используют некорректно.
Например, мы часто пренебрегаем именованием цветов и у нас в проектах появляется много оттенков одного и того же цвета: gray, graydark, graylight. Со временем туда могут добавится ещё и graylighter и graydarker.
Подобная ситауция часто возникает от неверного взаимодействия с дизайнерами и может здорово подпортить ситуацию в тот момент, когда добавляется поддержка темной темы.
Также многие из нас неверно истолковывают понимание того, что значит «тема» и «стиль» в приложении. И хотя оба имеют одинаковый синтаксис с тегом
По сути, стиль — это коллекция атрибутов View. Можно представить, что это Map<attrubute, resourse>, которая применяется для View.
Набор атрибутов может быть разный для каждой из View, и каждый из них можно применить в xml файле как параметр для View. Он применяется только для конкретной View, и не применяется для его детей.
Стиль служит для того, чтобы уменьшить количество кода. Очень удобно менять какой-то атрибут для всех View, имеющие одинаковый стиль.
По опыту скажу, что важно следить за атрибутами, которые вы пишите. Например, не стоит писать атрибуты, которые специфичны для использования View в конкретном layout, такие как ширина, высота и вес. Это чревато тем, что вы будете переопределять эти параметры напрямую в layout, а это уже противоречие в использовании стилей. Поэтому, если вы делаете так — это первый сигнал того, что лучше сделать новый стиль на основе существующего или писать эти атрибуты напрямую в layout.
Тема — это также коллекция атрибутов, но в отличии от стиля — она не имеет специальных свойств для конкретной View. Она применяется более широко и влияет на какую-то часть приложения или всё приложение. Поэтому, вы можете использовать её для любых компонентов, у которых есть
Тема нужна для для более гибкой настройки компонентов вашего экрана: можно ссылаться на атрибуты темы и в зависимости от них приложение будет выглядеть иначе.
Классная статья, рассказывающая об отличиях стиля и темы тут.
Сейчас как раз буду заниматься рефакторингом стилей в своём приложении, обязательно поделяюсь с вами опытом и сложностями, с которыми пришлось столкнуться😎.
#разработка #статьи
В Android существует система стилей, которую многие разработчики используют некорректно.
Например, мы часто пренебрегаем именованием цветов и у нас в проектах появляется много оттенков одного и того же цвета: gray, graydark, graylight. Со временем туда могут добавится ещё и graylighter и graydarker.
Подобная ситауция часто возникает от неверного взаимодействия с дизайнерами и может здорово подпортить ситуацию в тот момент, когда добавляется поддержка темной темы.
Также многие из нас неверно истолковывают понимание того, что значит «тема» и «стиль» в приложении. И хотя оба имеют одинаковый синтаксис с тегом
<style>
, они значат разное в приложении. По сути, стиль — это коллекция атрибутов View. Можно представить, что это Map<attrubute, resourse>, которая применяется для View.
Набор атрибутов может быть разный для каждой из View, и каждый из них можно применить в xml файле как параметр для View. Он применяется только для конкретной View, и не применяется для его детей.
Стиль служит для того, чтобы уменьшить количество кода. Очень удобно менять какой-то атрибут для всех View, имеющие одинаковый стиль.
По опыту скажу, что важно следить за атрибутами, которые вы пишите. Например, не стоит писать атрибуты, которые специфичны для использования View в конкретном layout, такие как ширина, высота и вес. Это чревато тем, что вы будете переопределять эти параметры напрямую в layout, а это уже противоречие в использовании стилей. Поэтому, если вы делаете так — это первый сигнал того, что лучше сделать новый стиль на основе существующего или писать эти атрибуты напрямую в layout.
Тема — это также коллекция атрибутов, но в отличии от стиля — она не имеет специальных свойств для конкретной View. Она применяется более широко и влияет на какую-то часть приложения или всё приложение. Поэтому, вы можете использовать её для любых компонентов, у которых есть
Context
, Activity
, Fragment
, ViewGroup
или View
. Тема нужна для для более гибкой настройки компонентов вашего экрана: можно ссылаться на атрибуты темы и в зависимости от них приложение будет выглядеть иначе.
Классная статья, рассказывающая об отличиях стиля и темы тут.
Сейчас как раз буду заниматься рефакторингом стилей в своём приложении, обязательно поделяюсь с вами опытом и сложностями, с которыми пришлось столкнуться😎.