Операторы shareIn и stateIn
#kotlin #flow
Операторы позволяют конвертировать cold flow в hot flow: они могут передавать информацию, которая приходит от потока и транслировать её нескольким подписчикам.
Эти операторы используются, если требуется улучшить производительность, добавить буфер, если нет подписчиков, ну или добавить механизм кэширования.
Между shareIn и stateIn по сути, существует только одна разница: первый преобразует
Вот хорошая статья, которая детально описывает применение этих операторов на примерах.
Главное запомнить, что никогда не стоит использовать эти операторы при возвращении
#kotlin #flow
Операторы позволяют конвертировать cold flow в hot flow: они могут передавать информацию, которая приходит от потока и транслировать её нескольким подписчикам.
Эти операторы используются, если требуется улучшить производительность, добавить буфер, если нет подписчиков, ну или добавить механизм кэширования.
Между shareIn и stateIn по сути, существует только одна разница: первый преобразует
Flow в SharedFlow, а второй — в StateFlow. Вот хорошая статья, которая детально описывает применение этих операторов на примерах.
Главное запомнить, что никогда не стоит использовать эти операторы при возвращении
Flow из функции: в этом случае у вас будет создаваться новый SharedFlow или StateFlow при каждом вызове функции, и он будет оставаться в памяти до тех пор, пока не очистится Scope или GB не уберёт его при отсутствии ссылок. В любом случае, это поведение неверное.Android Live на Boosty
#android_live
За время ведения канала у меня было несколько диалогов с подписчиками, которые изъявляли желание поддержать развитие канала. Однако, я старался избегать этой мысли, не было уверенности в том, что это нужно.
Но в последнее время, подписка на цифровой контент и поддержка его индивидуальных создателей получили широкое распространение и в нашем обществе. Многим хочется сделать так, чтобы контент выходил регулярнее и становился ещё лучше.
Наконец, на Android Live появились возможность поддержки канала рублём. Сделать это можно при помощи сервиса Boosty одноразовым или ежемесячным платежом.
Уже сейчас там есть цель и два уровня подписки. Думаю для начала этого достаточно, посмотрим, зайдёт ли эта возможность.
Ну и ответы на пару вопросов, которые могут возникнуть:
0️⃣ Будет ли в будущем контент распространяться за плату? Нет, такого точно не будет, канал останется бесплатным.
1️⃣ Зачем мне поддерживать канал? Поддерживая канал, вы даёте мне понимание того, что контент интересен. Плюс к этому, я смогу инвестировать эти средства в развитие канала: покупка рекламы, оборудования и т.д.
2️⃣ Можно ли доверять Boosty? В целом да. Я не заметил никаких скрытых платежей, сервис принадлежит большой компании и там есть возможность одноразового доната. Кроме того, комиссия за вывод средств одна из самых низких.
3️⃣ Можно ли как-то ещё помочь каналу? Материально пока что нет. Для меня это эксперимент, может быть в будущем такая возможность появится. Но если захотите скинуть кусочек биткоина на развитие — пишите😀.
Ну а если вы хотите помочь каналу не рублём, а делом — также пишите, сможем что-нибудь придумать.
Ссылка на Boosty тут.
#android_live
За время ведения канала у меня было несколько диалогов с подписчиками, которые изъявляли желание поддержать развитие канала. Однако, я старался избегать этой мысли, не было уверенности в том, что это нужно.
Но в последнее время, подписка на цифровой контент и поддержка его индивидуальных создателей получили широкое распространение и в нашем обществе. Многим хочется сделать так, чтобы контент выходил регулярнее и становился ещё лучше.
Наконец, на Android Live появились возможность поддержки канала рублём. Сделать это можно при помощи сервиса Boosty одноразовым или ежемесячным платежом.
Уже сейчас там есть цель и два уровня подписки. Думаю для начала этого достаточно, посмотрим, зайдёт ли эта возможность.
Ну и ответы на пару вопросов, которые могут возникнуть:
0️⃣ Будет ли в будущем контент распространяться за плату? Нет, такого точно не будет, канал останется бесплатным.
1️⃣ Зачем мне поддерживать канал? Поддерживая канал, вы даёте мне понимание того, что контент интересен. Плюс к этому, я смогу инвестировать эти средства в развитие канала: покупка рекламы, оборудования и т.д.
2️⃣ Можно ли доверять Boosty? В целом да. Я не заметил никаких скрытых платежей, сервис принадлежит большой компании и там есть возможность одноразового доната. Кроме того, комиссия за вывод средств одна из самых низких.
3️⃣ Можно ли как-то ещё помочь каналу? Материально пока что нет. Для меня это эксперимент, может быть в будущем такая возможность появится. Но если захотите скинуть кусочек биткоина на развитие — пишите😀.
Ну а если вы хотите помочь каналу не рублём, а делом — также пишите, сможем что-нибудь придумать.
Ссылка на Boosty тут.
ListAdapter для RecyclerView
#recyclerview
Почти все приложения так или иначе используют
По умолчанию используется
После этого, важно сделать корректное обновление списка: при этом не стоит использовать стандартный метод
Со временем адаптер может обрасти довольно большим количеством boilerplate code.
Для упрощения работы лучше использовать
• требует для работы
• рассчитывает разницу между двумя списками в background-потоке;
• добавляет метод
Чуть больше примеров использования этого класса можно найти тут.
#recyclerview
Почти все приложения так или иначе используют
RecyclerView. И одной из самых важных частей в ней является Adapter. По умолчанию используется
RecyclerView.Adapter, где нам требуется переопределить методы для создания и заполнения ViewHolder и указать число элементов в списке. После этого, важно сделать корректное обновление списка: при этом не стоит использовать стандартный метод
notifyDataSetChanged(), который обновит полный список, а лучше применить DiffUtil, который корректно обновит только новые элементы.Со временем адаптер может обрасти довольно большим количеством boilerplate code.
Для упрощения работы лучше использовать
ListAdapter, который: • требует для работы
DiffUtil.ItemCallback;• рассчитывает разницу между двумя списками в background-потоке;
• добавляет метод
submitList(), который принимает на вход новый список, поэтому не нужно больше думать о сохранении списка внутри адаптера.Чуть больше примеров использования этого класса можно найти тут.
Для чего нужны value классы?
#kotlin
Начиная с версии 1.5, в Kotlin появились value-классы. На первый взгляд, это новая функциональность, однако, по сути, она заменяет собой уже известные нам inline-классы, которые, в отличии от inline-функций не встраивались в код. Чтобы избежать этой путаницы, теперь их вывели в отдельную сущность и сделали value-классами.
Чтобы понять, для чего нам нужны эти классы, можно воспользоваться примером из статьи.
Допустим, у нас есть фукнция, которая на вход принимает параметр в виде duration для показа какого-то сообщения с задержкой:
Сходу непонятно, передавать этот параметр в секундах или в миллисекундах. И даже если переименовать параметр в
Хорошим решением здесь является создание обёртки, которая заставит явно указать единицы измерения. Например:
В этом случае мы спокойно можем модифицировать нашу функцию, чтобы принимать на вход
Взамен мы получим класс, который заменит примитив, и мы получим оптимизацию. Чуть больше почитать об этом можно в этой же статье.
#kotlin
Начиная с версии 1.5, в Kotlin появились value-классы. На первый взгляд, это новая функциональность, однако, по сути, она заменяет собой уже известные нам inline-классы, которые, в отличии от inline-функций не встраивались в код. Чтобы избежать этой путаницы, теперь их вывели в отдельную сущность и сделали value-классами.
Чтобы понять, для чего нам нужны эти классы, можно воспользоваться примером из статьи.
Допустим, у нас есть фукнция, которая на вход принимает параметр в виде duration для показа какого-то сообщения с задержкой:
fun showTooltip(message: String, duration: Long) { ... }Сходу непонятно, передавать этот параметр в секундах или в миллисекундах. И даже если переименовать параметр в
durationInMillis и добавить описание функции, всё равно есть риск допустить ошибку. Хорошим решением здесь является создание обёртки, которая заставит явно указать единицы измерения. Например:
class Duration private constructor (
val millis: Long
) {
companion object {
fun millis(millis: Long) = Duration(millis)
fun seconds(seconds: Long) = Duration(seconds * 1000)
}
}
В этом случае мы спокойно можем модифицировать нашу функцию, чтобы принимать на вход
Duration, а дальше создавать нужную нам задержку. Проблема в том, что каждый раз будет создаваться объект и тратиться лишняя память. Для таких случаев идеально подходят value-классы. Всё что нужно — это добавить ключевое слово value перед классом:@JvmInline
value class Duration private constructor (
val millis: Long
) {
companion object {
fun millis(millis: Long) = Duration(millis)
fun seconds(seconds: Long) = Duration(seconds * 1000)
}
}Взамен мы получим класс, который заменит примитив, и мы получим оптимизацию. Чуть больше почитать об этом можно в этой же статье.
Google I/O 2021
#conference
Просто напоминаю, что уже сегодня, через несколько часов, начнётся самая масштабная конференция для Android-разработчиков. В этом году она полностью онлайн и бесплатная, поэтому каждый из вас может поприсутствовать на ней.
Расписание тут, а также следите за анонсами на канале, ведь конференция принесёт нам много интересностей🙃
#conference
Просто напоминаю, что уже сегодня, через несколько часов, начнётся самая масштабная конференция для Android-разработчиков. В этом году она полностью онлайн и бесплатная, поэтому каждый из вас может поприсутствовать на ней.
Расписание тут, а также следите за анонсами на канале, ведь конференция принесёт нам много интересностей🙃
Что показали на Google I/O?
#conference
Вчера прошёл первый день конференции Google I/O.
Было достаточно много заявлений о том, в каких областях развивается Google, на какие темы компания делает акцент и т.д. Мы же коснёмся некоторых из новинок, которые касаются нас, разработчиков.
🔹WearOS обновился. Было много рассказано о коллаборации с TizenOS от Samsung, и что самое интересное — в будущих версиях Samsung будет использовать обновлённый WearOS. Добавили оптимизацию батареи, улучшили скорость работы.
Компания говорит о том, что носимые устройства крайне важны, особенно сейчас и их роль будет увеличиваться. Посмотрим, мне кажется, что подобная коллаборация полезна обоим компаниям.
🔹Firebase Extensions. Эта штука уже была добавлена ранее, но сейчас появилась пара новых фич. Суть в том, что есть некий набор расширений, которые вы можете интегрировать себе в приложение за пару часов, и некоторые из этих расширений сделаны не Google, а сторонними компаниями. Добавена оплата подписки через Stripe, а также отправка сообщений через MessageBird.
Не уверен, что будет полезно российскому рынку, но посмотрим. Кроме этого, добавлены обновления в личном кабинете Firebase: например, возможность получения быстрой информации о крашах, улучшения каких-то характеристик в новом релизе и т.д. Пока что в alpha, но выглядит любопытно.
Теперь давайте поговорим про Keynote Android. Тут также есть неплохие новинки:
🔹новые цвета тем. Теперь помимо стандартных, обычной и ночной темы, есть возможность использовать целую палитру цветов в своих темах. Рассказали, что теперь тема может автоматически выбираться на основании, например, фона устройства.
🔹обновление виджетов 🎉. Теперь виджеты также должны быть синхронизированы с цветами основного телефона. Но самое главное — новое API для построения виджетов. Сессию про виджеты можно посмотреть тут.
🔹launch animations. Теперь система сама создаёт анимацию для вашего приложения. Её можно кастомизировать, но из коробки появилась красивая, плавная анимация старта приложения.
🔹обновления notifications. Изменили внешний вид уведомлений, в целом стало симпатичнее. Было сказано, что если вы использовали стандартное API для работы, то ничего не придётся менять, всё будет выглядеть симпатично и на новых версиях системы. Кроме того, теперь нельзя использовать полностью кастомные view в уведомлениях.
🔹обновления toasts. Как ни странно, не забыли и про этот элемент. Теперь Toast будет показывать иконку приложения из которого он был отправлен. Также, уменьшили длину сообщения (рекомендуется использовать сообщение не больше 2 строк), убрали возможность слишком частой отправки toast пользователю.
🔹добавили blur для кастомных view. Теперь можно добавлять blur из коробки, не нужно придумывать свои собственные решения. Эту штуку давно просили, пообещали хорошую производительность при использовании.
🔹поменяли внешний вид ripple-эффекта и overscroll mode. В целом, это касается изменений дизайна, которые будут включены по умолчанию в системе. Выглядит также свежо и более логично.
🔹haptick playback. Добавили фичу, которой можно отправить media-файл, и он сгенерирует модель для того, чтобы ваш телефон вибрировал в такт этой мелодии 😁.
🔹approximate location. Теперь пользователь может выбирать, давать ли разрешение на точное местоположение девайса или примерное.
🔹добавили задержку на показ нотификаций в foreground-сервисах. Крутое обновление: если ваше приложение делает какое-то быстрое действие в фоне, то теперь пользователя не будут беспокоить уведомления, которые сообщают ему об этом.
🔹изменения на старт foreground-сервисов из фона. Если вы так делали, то теперь придётся немного изменить логику работы. Чуть больше деталей можно посмотреть тут.
В целом, конференция показала довольно много интересных штук, хотя многие ожидали больших анонсов и изменений.
Какие вещи с конференции вам понравились больше всего?
#conference
Вчера прошёл первый день конференции Google I/O.
Было достаточно много заявлений о том, в каких областях развивается Google, на какие темы компания делает акцент и т.д. Мы же коснёмся некоторых из новинок, которые касаются нас, разработчиков.
🔹WearOS обновился. Было много рассказано о коллаборации с TizenOS от Samsung, и что самое интересное — в будущих версиях Samsung будет использовать обновлённый WearOS. Добавили оптимизацию батареи, улучшили скорость работы.
Компания говорит о том, что носимые устройства крайне важны, особенно сейчас и их роль будет увеличиваться. Посмотрим, мне кажется, что подобная коллаборация полезна обоим компаниям.
🔹Firebase Extensions. Эта штука уже была добавлена ранее, но сейчас появилась пара новых фич. Суть в том, что есть некий набор расширений, которые вы можете интегрировать себе в приложение за пару часов, и некоторые из этих расширений сделаны не Google, а сторонними компаниями. Добавена оплата подписки через Stripe, а также отправка сообщений через MessageBird.
Не уверен, что будет полезно российскому рынку, но посмотрим. Кроме этого, добавлены обновления в личном кабинете Firebase: например, возможность получения быстрой информации о крашах, улучшения каких-то характеристик в новом релизе и т.д. Пока что в alpha, но выглядит любопытно.
Теперь давайте поговорим про Keynote Android. Тут также есть неплохие новинки:
🔹новые цвета тем. Теперь помимо стандартных, обычной и ночной темы, есть возможность использовать целую палитру цветов в своих темах. Рассказали, что теперь тема может автоматически выбираться на основании, например, фона устройства.
🔹обновление виджетов 🎉. Теперь виджеты также должны быть синхронизированы с цветами основного телефона. Но самое главное — новое API для построения виджетов. Сессию про виджеты можно посмотреть тут.
🔹launch animations. Теперь система сама создаёт анимацию для вашего приложения. Её можно кастомизировать, но из коробки появилась красивая, плавная анимация старта приложения.
🔹обновления notifications. Изменили внешний вид уведомлений, в целом стало симпатичнее. Было сказано, что если вы использовали стандартное API для работы, то ничего не придётся менять, всё будет выглядеть симпатично и на новых версиях системы. Кроме того, теперь нельзя использовать полностью кастомные view в уведомлениях.
🔹обновления toasts. Как ни странно, не забыли и про этот элемент. Теперь Toast будет показывать иконку приложения из которого он был отправлен. Также, уменьшили длину сообщения (рекомендуется использовать сообщение не больше 2 строк), убрали возможность слишком частой отправки toast пользователю.
🔹добавили blur для кастомных view. Теперь можно добавлять blur из коробки, не нужно придумывать свои собственные решения. Эту штуку давно просили, пообещали хорошую производительность при использовании.
🔹поменяли внешний вид ripple-эффекта и overscroll mode. В целом, это касается изменений дизайна, которые будут включены по умолчанию в системе. Выглядит также свежо и более логично.
🔹haptick playback. Добавили фичу, которой можно отправить media-файл, и он сгенерирует модель для того, чтобы ваш телефон вибрировал в такт этой мелодии 😁.
🔹approximate location. Теперь пользователь может выбирать, давать ли разрешение на точное местоположение девайса или примерное.
🔹добавили задержку на показ нотификаций в foreground-сервисах. Крутое обновление: если ваше приложение делает какое-то быстрое действие в фоне, то теперь пользователя не будут беспокоить уведомления, которые сообщают ему об этом.
🔹изменения на старт foreground-сервисов из фона. Если вы так делали, то теперь придётся немного изменить логику работы. Чуть больше деталей можно посмотреть тут.
В целом, конференция показала довольно много интересных штук, хотя многие ожидали больших анонсов и изменений.
Какие вещи с конференции вам понравились больше всего?
Что показали на Google I/O? Статья от Google
#conference
В дополнение к предыдущему посту, вот summary от Google: что добавилось для Android-разработчиков после уже прошедших докладов.
В целом, в предыдущем посте описаны основные моменты, но почитать ещё раз чуть детальнее о новинках всё равно стоит. А может вам просто нравится читать статьи от Google.
Ссылка на статью тут.
#conference
В дополнение к предыдущему посту, вот summary от Google: что добавилось для Android-разработчиков после уже прошедших докладов.
В целом, в предыдущем посте описаны основные моменты, но почитать ещё раз чуть детальнее о новинках всё равно стоит. А может вам просто нравится читать статьи от Google.
Ссылка на статью тут.
Базовая информация о темах в Android
#theme #design #beginners
Использование тем и стилей в Android на первый взгляд достаточно простая, но при детальном рассмотрении — запутанная вещь.😑
Со временем роста проекта использование неправильно настроенных тем и стилей может быть чревато тем, что в приложении появятся противоречивые цвета или несколько оттенков одного и того же цвета.
А с миграцией на Compose, ситуация может только ухудшиться, ведь использование стилей там идёт в другом, но похожем ключе.
В Android существует довольно много элементов для тем, среди них: Attributes, Styles, Theme, TextAppearance… все они предполагают похожие элементы, но действуют по-разному.
Чтобы вам было легче разобраться во всём этом многообразии, советую прочитать эту статью. Автор не только описывает каждый из элементов стилей, но и подсказывает, когда какой правильно применить и как настроить тему в Android.
На канале также были полезные статьи на тему стилей, так что если вы хотите сильнее углубиться в настройку тем, то прочитайте ещё и этот пост.
#theme #design #beginners
Использование тем и стилей в Android на первый взгляд достаточно простая, но при детальном рассмотрении — запутанная вещь.😑
Со временем роста проекта использование неправильно настроенных тем и стилей может быть чревато тем, что в приложении появятся противоречивые цвета или несколько оттенков одного и того же цвета.
А с миграцией на Compose, ситуация может только ухудшиться, ведь использование стилей там идёт в другом, но похожем ключе.
В Android существует довольно много элементов для тем, среди них: Attributes, Styles, Theme, TextAppearance… все они предполагают похожие элементы, но действуют по-разному.
Чтобы вам было легче разобраться во всём этом многообразии, советую прочитать эту статью. Автор не только описывает каждый из элементов стилей, но и подсказывает, когда какой правильно применить и как настроить тему в Android.
На канале также были полезные статьи на тему стилей, так что если вы хотите сильнее углубиться в настройку тем, то прочитайте ещё и этот пост.
Что за Material Navigation Rail?
#design #view
Одной из фич, которая была детально рассмотрена на прошедшем Google I/O — это работа с гибкими устройствами, планшетами и большими экранами. Видео тут, а одним из упоминаний была пока не самая популярная View —
По сути — это вертикальный
В статье отлично описывается то, как использовать этот компонент, как настроить различные свойства и стили. Выглядит неплохо, и если ваше приложение предусматривает горизонтальный режим — обратите внимание на него.
#design #view
Одной из фич, которая была детально рассмотрена на прошедшем Google I/O — это работа с гибкими устройствами, планшетами и большими экранами. Видео тут, а одним из упоминаний была пока не самая популярная View —
Material Navigation Rail.По сути — это вертикальный
Bottom Navigation Bar. Однако, эта View подходит не во всех случаях: например, пользователь использует приложение в альбомной ориентации. В этом случае пространство внизу занято Bottom Navigation Bar, что делает использование контента менее удобным. В статье отлично описывается то, как использовать этот компонент, как настроить различные свойства и стили. Выглядит неплохо, и если ваше приложение предусматривает горизонтальный режим — обратите внимание на него.
Ещё про миграцию с LiveData на Flow
#flow #livedata
На канале уже несколько раз было сказано про миграцию на
Ну и как всегда, описывается, что такое
В общем, рекомендую статью для всех, кто ещё думает о переезде или хочет лучше понять использование Flow в реальных проектах.
#flow #livedata
На канале уже несколько раз было сказано про миграцию на
Flow с LiveData, но тут на глаза попалась отличная статья, где описываются примеры из реальной разработки и то, как перевести их на Flow.Ну и как всегда, описывается, что такое
SharedFlow и StateFlow, то, какие параметры там есть, и что они значат. Есть отличные примеры стратегий у Flow и то, когда какая подойдёт для использования. В общем, рекомендую статью для всех, кто ещё думает о переезде или хочет лучше понять использование Flow в реальных проектах.
Что добавили на Google I/O 2021?
#youtube
Отгремел Google I/O, было показано достаточно много полезных штук, с которым нам предстоит работать следующий год.
На канале тоже появилось не мало различных статей о новых фичах, но хочется разбавить этот формат и обсудить с экспертами, что же добавилось нового🤟.
А сделаем мы это на YouTube-канале Android Live в формате коротких докладов и ответов на ваши вопросы!
Наши эксперты:
🔵 Дмитрий Григорьев — автор канала, где есть куча материала про этот фреймворк — расскажет нам, как ни странно про Compose, а точнее про работу с MaterialTheme в Jetpack Compose, ведь совсем скоро нас ждёт релиз.
🔵 Иван Баранов — эксперт с опытом разработки под Android более 8 лет, расскажет нам про новинки в Media, и что эти новинки значат для обычных разработчиков.
🔵 Фёдор Цымбал — эксперт с 7 летним опытом в Android, работает в компании Orion Innovations, расскажет нам про Wear OS, Android TV и Android for Cars. Google обещает шуструю работу Android на этих устройствах, и быть может вы захотите написать своё приложение и на них.
Стрим пройдёт 31 мая в 18:30 на YouTube-канале Android Live, ссылка на трансляцию тут. До встречи, и обязательно подписывайтесь на канал🚀.
#youtube
Отгремел Google I/O, было показано достаточно много полезных штук, с которым нам предстоит работать следующий год.
На канале тоже появилось не мало различных статей о новых фичах, но хочется разбавить этот формат и обсудить с экспертами, что же добавилось нового🤟.
А сделаем мы это на YouTube-канале Android Live в формате коротких докладов и ответов на ваши вопросы!
Наши эксперты:
🔵 Дмитрий Григорьев — автор канала, где есть куча материала про этот фреймворк — расскажет нам, как ни странно про Compose, а точнее про работу с MaterialTheme в Jetpack Compose, ведь совсем скоро нас ждёт релиз.
🔵 Иван Баранов — эксперт с опытом разработки под Android более 8 лет, расскажет нам про новинки в Media, и что эти новинки значат для обычных разработчиков.
🔵 Фёдор Цымбал — эксперт с 7 летним опытом в Android, работает в компании Orion Innovations, расскажет нам про Wear OS, Android TV и Android for Cars. Google обещает шуструю работу Android на этих устройствах, и быть может вы захотите написать своё приложение и на них.
Стрим пройдёт 31 мая в 18:30 на YouTube-канале Android Live, ссылка на трансляцию тут. До встречи, и обязательно подписывайтесь на канал🚀.
Google I/O Android App
#design
Думаю, что многие из вас в курсе про приложение для Google I/O со списком докладов и сессий. В этом году из-за онлайн-мероприятия приложение не пользовалось спросом и список докладов идёт из I/O 2019 года, однако ребята из Google всё равно обновили кодовую базу.
Список главных изменений:
🔸миграция с LiveData на Flow — можно как раз посмотреть, как поключить
🔸поддержка больших экранов и разных форм-факторов — пока не смотрел доработки, которые были сделаны в этом пункте, но уверен, что там будет
🔸миграция с SharedPreferences на DataStore — хороший пример реализации, после которого вы увидите, что мигрировать на новую библиотеку довольно просто. Сейчас она в beta-стадии, выглядит очень приятно.
🔸частичная поддержка Jetpack Compose — нужно переключить в отдельную ветку, чтобы посмотреть переход на Compose.
Добавлю ещё сюда поддержку Jetpack Benchmark library, которая была анонсирована на последнем I/O, она позволяет тестировать многие параметры приложения.
Единственный момент — сейчас приложение может некорректно работать на последней версии Arctic Fox, но уже создана issue на правку🤦♂️.
#design
Думаю, что многие из вас в курсе про приложение для Google I/O со списком докладов и сессий. В этом году из-за онлайн-мероприятия приложение не пользовалось спросом и список докладов идёт из I/O 2019 года, однако ребята из Google всё равно обновили кодовую базу.
Список главных изменений:
🔸миграция с LiveData на Flow — можно как раз посмотреть, как поключить
Flow к жизненному циклу фрагментов;🔸поддержка больших экранов и разных форм-факторов — пока не смотрел доработки, которые были сделаны в этом пункте, но уверен, что там будет
Navigation Rail. Не думаю, что гибкие смартфоны — это будущее в ближайшее время, но радует, что уже есть инструменты для адаптации приложений;🔸миграция с SharedPreferences на DataStore — хороший пример реализации, после которого вы увидите, что мигрировать на новую библиотеку довольно просто. Сейчас она в beta-стадии, выглядит очень приятно.
🔸частичная поддержка Jetpack Compose — нужно переключить в отдельную ветку, чтобы посмотреть переход на Compose.
Добавлю ещё сюда поддержку Jetpack Benchmark library, которая была анонсирована на последнем I/O, она позволяет тестировать многие параметры приложения.
Единственный момент — сейчас приложение может некорректно работать на последней версии Arctic Fox, но уже создана issue на правку🤦♂️.
Compose для Desktop — Milestone 4
#compose
Отличная новость в первый день лета: сегодня появилась новая версия Compose для Desktop — Milestone 4🔥.
Если кто не знает, то этот инструмент позволяет создавать интерфейсы для десктопов, используя Jetpack Compose. Пока эти инструменты развиваются в разных ветках, но сама идея того, что мы сможем писать интерфейс ещё и для десктопов очень радует.
В этом релизе добавили:
🔹Composable Window API — набор абстракций для Window, Dialog, MenuBar и Tray. Соотвественно, добавился и набор атрибутов для управления различными свойствами для окон, диалогов и т.д.
🔹улучшения в рендеринге — теперь будет использоваться Metal на устройствах Apple, можно выбрать приоритетность для рендеринга между интегрированной и дискретной картой;
🔹 улучшения для работы с текстом.
Больше деталей можно почитать тут.
#compose
Отличная новость в первый день лета: сегодня появилась новая версия Compose для Desktop — Milestone 4🔥.
Если кто не знает, то этот инструмент позволяет создавать интерфейсы для десктопов, используя Jetpack Compose. Пока эти инструменты развиваются в разных ветках, но сама идея того, что мы сможем писать интерфейс ещё и для десктопов очень радует.
В этом релизе добавили:
🔹Composable Window API — набор абстракций для Window, Dialog, MenuBar и Tray. Соотвественно, добавился и набор атрибутов для управления различными свойствами для окон, диалогов и т.д.
🔹улучшения в рендеринге — теперь будет использоваться Metal на устройствах Apple, можно выбрать приоритетность для рендеринга между интегрированной и дискретной картой;
🔹 улучшения для работы с текстом.
Больше деталей можно почитать тут.
Splash Screen в Android 12
#design
На последнем I/O было сказано о созданном по умолчанию Splash Screen. Кроме того, что теперь он есть во всех приложениях по умолчанию, у нас появилась возможность кастомизировать настройки.
В статье автор рассказывает о своём опыте кастомизации уже существующего Splash Screen и адаптации его под новое API.
Интересно, что кроме обычных иконок, можно использовать и анимированную векторную графику. Желательно только, чтобы она вписывалась во время жизни Splash. Свойств не так много, но теперь всем, у кого уже есть Splash надо кастомизировать его под новые настройки Android 12.
#design
На последнем I/O было сказано о созданном по умолчанию Splash Screen. Кроме того, что теперь он есть во всех приложениях по умолчанию, у нас появилась возможность кастомизировать настройки.
В статье автор рассказывает о своём опыте кастомизации уже существующего Splash Screen и адаптации его под новое API.
Интересно, что кроме обычных иконок, можно использовать и анимированную векторную графику. Желательно только, чтобы она вписывалась во время жизни Splash. Свойств не так много, но теперь всем, у кого уже есть Splash надо кастомизировать его под новые настройки Android 12.
Работа с каталогами в gradle 7.0
#gradle
При работе с Gradle существует довольно много способов для описания зависимостей в проекте. Кто-то оставляет всё по умолчанию, кто-то выносит всё в отдельный файлик, например
Проблема в том, что для новых разработчиков команды не всегда очевидно, где эти зависимости располагаются, а также ими становится сложнее управлять на многомодульных проектах.
Совсем недавно появилась возможность использовать каталоги для описания зависимостей. Пока что фича в превью, но уже можно ознакомиться с её работой.
По сути, список зависимостей превращается в:
А сам каталог libs настраивается так:
Пока есть некоторые проблемы при работе, однако, мне кажется, что такой подход является более удобным при обработке зависимостей. Почитать подробнее можно в этой статье.
Что думаете вы?
#gradle
При работе с Gradle существует довольно много способов для описания зависимостей в проекте. Кто-то оставляет всё по умолчанию, кто-то выносит всё в отдельный файлик, например
dependencies.gradle. Проблема в том, что для новых разработчиков команды не всегда очевидно, где эти зависимости располагаются, а также ими становится сложнее управлять на многомодульных проектах.
Совсем недавно появилась возможность использовать каталоги для описания зависимостей. Пока что фича в превью, но уже можно ознакомиться с её работой.
По сути, список зависимостей превращается в:
dependencies {
implementation libs.lifecycle.runtime
implementation libs.lifecycle.viewmodel.ktx
implementation libs.lifecycle.extentions
implementation libs.lifecycle.livedata.ktx
}А сам каталог libs настраивается так:
versionCatalogs {
libs {
alias('lifecycle-runtime').to('androidx.lifecycle:lifecycle -runtime:2.2.0')
alias('lifecycle-viewmodel-ktx').to('androidx.lifecycle', 'lifecycle-viewmodel-ktx')
.version {
strictly '[2.2.0, 2.3.0['
prefer '2.3.1'
}
}
}Пока есть некоторые проблемы при работе, однако, мне кажется, что такой подход является более удобным при обработке зависимостей. Почитать подробнее можно в этой статье.
Что думаете вы?
Security By Design
#security
Думаю, что не открою чего-то нового, если скажу, что безопасность приложений — это очень важная штука. Но для многих разработчиков — это довольно непонятная вещь, несмотря на то, что Google даже сделали список практик для безопасных приложений.
Кроме этого, они недавно анонсировал курс, связанный с безопасностью приложений. Подойдёт для всех, кто не очень понимает в этой теме, но хотел бы создавать более безопасные приложения.
Курс состоит из нескольких частей, где рассказывается про то, какие средства использовать для шифрования важной информации, как проверить своё приложение на предмет уязвимостей и как их устранить.
Выглядит интересно, добавляю в закладки, чтобы пройти его и обязательно поделюсь полезными советами с вами. Но вы тоже посмотрите, ведь любой может найти для себя полезные советы.
Курс бесплатный, ссылка на описание тут, а пройти его можно тут.
#security
Думаю, что не открою чего-то нового, если скажу, что безопасность приложений — это очень важная штука. Но для многих разработчиков — это довольно непонятная вещь, несмотря на то, что Google даже сделали список практик для безопасных приложений.
Кроме этого, они недавно анонсировал курс, связанный с безопасностью приложений. Подойдёт для всех, кто не очень понимает в этой теме, но хотел бы создавать более безопасные приложения.
Курс состоит из нескольких частей, где рассказывается про то, какие средства использовать для шифрования важной информации, как проверить своё приложение на предмет уязвимостей и как их устранить.
Выглядит интересно, добавляю в закладки, чтобы пройти его и обязательно поделюсь полезными советами с вами. Но вы тоже посмотрите, ведь любой может найти для себя полезные советы.
Курс бесплатный, ссылка на описание тут, а пройти его можно тут.
Multiple backstacks
#fragment #jetpack
Хорошая статья, где автор рассказывает о множественных backstacks, и о том, как их применять в свежей версии
При использовании кнопки back наша
Теперь же у нас добавились два новых метода:
Крутое обновление, надеюсь что текущее API не пострадало: ребята говорят о том, что им пришлось 6 месяцев на изменения API
Кроме этого, всё будет работать из коробки для
#fragment #jetpack
Хорошая статья, где автор рассказывает о множественных backstacks, и о том, как их применять в свежей версии
Navigation и Fragment.При использовании кнопки back наша
Activity закрывается. Но если у нас в ней есть Fragments, то мы можем кастомизировать это поведение при помощи OnBackPressedDispatcher , например вызывая метод popBackStack(). Он не совсем хорош, ведь не позволяет сохранить состояние наших фрагментов. Теперь же у нас добавились два новых метода:
saveBackStack() и restoreBackStack(), благодаря которым мы можем этими состояниями управлять, и по факту иметь несколько backstack. Крутое обновление, надеюсь что текущее API не пострадало: ребята говорят о том, что им пришлось 6 месяцев на изменения API
Fragments, но обещают, что текущие методы будут работать корректно.Кроме этого, всё будет работать из коробки для
Navigation и View, связанных с ней.Популярные библиотеки для KMM
#kmm #kotlin
Со времени релиза KMM появилось довольно много библиотек, которые дают возможность делать привычные вещи — запросы в сеть, хранение настроек, создание базы данных — сразу на нескольких платформах.
Но поле для деятельности и разработки огромное, и вот вам статья с обзором популярных библиотек для KMM, с порцией мотивации авторов о разработке этих решений.
Тут есть краткий, не технический обзор SQLDelight, Decompose, Realm Kotlin Multiplatform SDK, Multiplatform Settings и Ktor.
С авторами некоторых из библиотек есть интервью, где рассказывается о внутренностях работы с этими библиотеками, про мотивацию, ну и будущие планы для работы с решениями.
Кроме этого, автор мотивирует нас, разработчиков, делать свой вклад в библиотеки для KMM, так как есть ещё огромное число областей, которые требуют своих библиотек. Если у вас есть мысли о том, чтоб «законтрибьютить» своё решение, вот вам статья для этого.
Ссылка на статью тут.
#kmm #kotlin
Со времени релиза KMM появилось довольно много библиотек, которые дают возможность делать привычные вещи — запросы в сеть, хранение настроек, создание базы данных — сразу на нескольких платформах.
Но поле для деятельности и разработки огромное, и вот вам статья с обзором популярных библиотек для KMM, с порцией мотивации авторов о разработке этих решений.
Тут есть краткий, не технический обзор SQLDelight, Decompose, Realm Kotlin Multiplatform SDK, Multiplatform Settings и Ktor.
С авторами некоторых из библиотек есть интервью, где рассказывается о внутренностях работы с этими библиотеками, про мотивацию, ну и будущие планы для работы с решениями.
Кроме этого, автор мотивирует нас, разработчиков, делать свой вклад в библиотеки для KMM, так как есть ещё огромное число областей, которые требуют своих библиотек. Если у вас есть мысли о том, чтоб «законтрибьютить» своё решение, вот вам статья для этого.
Ссылка на статью тут.
compileSdkVersion vs targetSdkVersion
#gradle
Уверен, что каждый из вас хотя бы раз обновлял параметры
Вот вам отличная статья, которая описывает разницу между этими параметрами. Если совсем кратко:
🔹 compileSdkVersion определяет, какая версия Android SDK будет использоваться gradle для компиляции вашего приложения.
Например, в последней версии Android появилось новое API для работы со splash-экранами. Если вы хотите использовать данную фичу, то вам следует поднять ваш
Это не значит, что теперь вы будете использовать только новое API и забудете о пользователях, которые находятся на более старых версия системы. В случае, если
Частенько после изменения compileSdkVersion вы можете увидеть warnings и ошибки в логах, так как некоторые методы могут стать deprecated, а API поменяться.
🔹targetSdkVersion определяет, на какой версии системы ваше приложение было протестировано и создано.
Если запустить приложение на версии Android, которая выше, чем ваша
Например, в Android 12 поменялся дизайн отображения уведомлений, и они будут выглядеть по-разному, если вы поставите
Кстати, между этими параметрами можно выделить следующее правило:
#gradle
Уверен, что каждый из вас хотя бы раз обновлял параметры
compileSdkVersion и targetSdkVersion. Чаще всего, мы обновляем их вместе, иногда ставим одно и то же значение, не задумываясь о том, что они значат, и для чего нужны. Вот вам отличная статья, которая описывает разницу между этими параметрами. Если совсем кратко:
🔹 compileSdkVersion определяет, какая версия Android SDK будет использоваться gradle для компиляции вашего приложения.
Например, в последней версии Android появилось новое API для работы со splash-экранами. Если вы хотите использовать данную фичу, то вам следует поднять ваш
compileSdkVersion до 31 версии. Это не значит, что теперь вы будете использовать только новое API и забудете о пользователях, которые находятся на более старых версия системы. В случае, если
minSdkVersion меньше, чем 31 вам потребуется сделать реализацию splash также и для остальных пользователей.Частенько после изменения compileSdkVersion вы можете увидеть warnings и ошибки в логах, так как некоторые методы могут стать deprecated, а API поменяться.
🔹targetSdkVersion определяет, на какой версии системы ваше приложение было протестировано и создано.
Если запустить приложение на версии Android, которая выше, чем ваша
targetSdkVersion, то система постарается сделать backwards-compatibility для некоторых из фич, добавленных именно в этой системе. Например, в Android 12 поменялся дизайн отображения уведомлений, и они будут выглядеть по-разному, если вы поставите
targetSdkVersion 30 или 31. Кстати, между этими параметрами можно выделить следующее правило:
targetSdkVersion не может быть больше compileSdkVersion, а в идеале они должны быть равны между собой и равны последней версии SDK.Android приложение на Firebase
#firebase
Нашёл отличный пример приложения, написанное на Kotlin, которое использует продукты Firebase.
Автор решил ответить на топ самых популярных вопросов, связанных с Firebase в виде небольшого приложения, вот некоторые из них:
• как настроить авторизацию пользователей, и записать информацию о них в Cloud Firestore?
• как сделать авторизацию через Google корректной?
• как правильно читать данные из Realtime Database, используя MVVM, Coroutines и Flow?
Так и получилось приложение FireApp, где даны ответы на эти и многие другие вопросы. Автор говорит, что приложение будет пополняться фичами и дальше, так что, вероятно, нас ждёт большая функциональность.
Рекомендую ознакомиться, если вы раньше плотно не работали с Firebase сервисами, но задумываетесь об использовании их в своих проектах
#firebase
Нашёл отличный пример приложения, написанное на Kotlin, которое использует продукты Firebase.
Автор решил ответить на топ самых популярных вопросов, связанных с Firebase в виде небольшого приложения, вот некоторые из них:
• как настроить авторизацию пользователей, и записать информацию о них в Cloud Firestore?
• как сделать авторизацию через Google корректной?
• как правильно читать данные из Realtime Database, используя MVVM, Coroutines и Flow?
Так и получилось приложение FireApp, где даны ответы на эти и многие другие вопросы. Автор говорит, что приложение будет пополняться фичами и дальше, так что, вероятно, нас ждёт большая функциональность.
Рекомендую ознакомиться, если вы раньше плотно не работали с Firebase сервисами, но задумываетесь об использовании их в своих проектах
ADB-команды
#tools
Уверен, что вы знакомы с таким инструметом, как adb. По сути, это программа в виде командной строки, которая позволяет коммуницировать с подсоединённым устройством Android. Сегодня пару советов про этот полезный инструмент.
Есть отличный плагин для автоматизации распространённых действий при помощи adb — ADB Idea, который крайне рекомендую поставить и пользоваться с удовольствием.
Также попалась неплохоая статья, где описываются наиболее распространённые и полезные команды. Не все из них вы будете применять каждый день, но может быть вы найдёте что-то полезное для себя.
От себя добавлю классный флаг к команде
А какой ваш топ полезных команд?
#tools
Уверен, что вы знакомы с таким инструметом, как adb. По сути, это программа в виде командной строки, которая позволяет коммуницировать с подсоединённым устройством Android. Сегодня пару советов про этот полезный инструмент.
Есть отличный плагин для автоматизации распространённых действий при помощи adb — ADB Idea, который крайне рекомендую поставить и пользоваться с удовольствием.
Также попалась неплохоая статья, где описываются наиболее распространённые и полезные команды. Не все из них вы будете применять каждый день, но может быть вы найдёте что-то полезное для себя.
От себя добавлю классный флаг к команде
adb install -g app.apk, который дает все разрешения приложению. Удобно, если дебажите приложение и не хотите заморачиваться с лишним прокликиванием уже знакомых диалогов. Её также можно добавить как атрибут при запуске приложения из Android Studio.А какой ваш топ полезных команд?