Загрузка больших изображений в RecyclerView
#tips
Думаю, что не мне вам объяснять важность плавного скролла в приложении. Часто он может проседать в ситуациях, когда изображения в элементах списка — большие.
Автор статьи решил решить эту проблему при помощи кастомного
Звучит довольно логично и просто, хотя не обошлось без проблем: изображения ставятся в очередь на загрузку, и если их будет слишком много, а их объём будет слишком большой, то пользователь увидит этот момент, и опыт использования скролла будет не такой приятный.
В общем, если у вас нет возможности оптимизировать изображения, этот совет может вам помочь.
#tips
Думаю, что не мне вам объяснять важность плавного скролла в приложении. Часто он может проседать в ситуациях, когда изображения в элементах списка — большие.
Автор статьи решил решить эту проблему при помощи кастомного
RecyclerView
Scroll Listener, в котором описал метод для того, чтобы ставить на паузу и возобновлять загрузку только тех изображений, которые видны пользователю.Звучит довольно логично и просто, хотя не обошлось без проблем: изображения ставятся в очередь на загрузку, и если их будет слишком много, а их объём будет слишком большой, то пользователь увидит этот момент, и опыт использования скролла будет не такой приятный.
В общем, если у вас нет возможности оптимизировать изображения, этот совет может вам помочь.
👍6
Android Studio Bumblebee
#android
Тут прилетел новый финальный релиз Android Studio под названием Bumblebee 🐝.
Вот некоторые из новинок:
1️⃣ New Device Manager — добавили вкладку, где можно более удобным способом менеджерить устройства, подключенные к Android Studio.
2️⃣ ADB over Wi-Fi — упростили подключение и дебаг приложений при помощи Wi-Fi. Теперь достаточно просто отсканировать QR-код и девайс будет подключен к дебагу.
Штука удобная, правда не уверен, что часто будет использоваться в повседневной работе.
3️⃣ Новый Test Runner — добавили возможность запуска тестов для инструментальных тестов, который призван убрать проблему, когда они по-разному запускались на устройстве или CI.
4️⃣ Улучшения в профайлере — добавили новых метрик для профайлинга: Frame Lifecycle: Application, Wait for GPU, Composition и Frames on display. Ещё появился Junk Detection, который позволит лучше дебажить ситуации, когда есть просадки в производительности.
5️⃣ Улучшили Background Task Inspector, где теперь можно дебажить Jobs, Alarms и Wakelocks.
6️⃣ Добавили всякие штуки для дизайна — сделали превью векторных анимаций, поправили превью Compose.
Билд получился хороший, я обновился и вроде даже ничего не поломалось 🤞🏻, так что смело пробуйте. Больше деталей про обновление можно найти тут
#android
Тут прилетел новый финальный релиз Android Studio под названием Bumblebee 🐝.
Вот некоторые из новинок:
1️⃣ New Device Manager — добавили вкладку, где можно более удобным способом менеджерить устройства, подключенные к Android Studio.
2️⃣ ADB over Wi-Fi — упростили подключение и дебаг приложений при помощи Wi-Fi. Теперь достаточно просто отсканировать QR-код и девайс будет подключен к дебагу.
Штука удобная, правда не уверен, что часто будет использоваться в повседневной работе.
3️⃣ Новый Test Runner — добавили возможность запуска тестов для инструментальных тестов, который призван убрать проблему, когда они по-разному запускались на устройстве или CI.
4️⃣ Улучшения в профайлере — добавили новых метрик для профайлинга: Frame Lifecycle: Application, Wait for GPU, Composition и Frames on display. Ещё появился Junk Detection, который позволит лучше дебажить ситуации, когда есть просадки в производительности.
5️⃣ Улучшили Background Task Inspector, где теперь можно дебажить Jobs, Alarms и Wakelocks.
6️⃣ Добавили всякие штуки для дизайна — сделали превью векторных анимаций, поправили превью Compose.
Билд получился хороший, я обновился и вроде даже ничего не поломалось 🤞🏻, так что смело пробуйте. Больше деталей про обновление можно найти тут
👍22🔥3😱1
GraphQL в Android для начинающих
#android #новичкам
Интересная статья, которая рассказываем о применении GraphQL в Android с самого начала.
Автор делится своими размышлениями о том, что такое GraphQL, какие есть преимущества над обычными REST API, а также что выбрать для того, чтобы добавить эту либу в своё приложение.
Крайне рекомендую, ведь инструмент очень полезный.
#android #новичкам
Интересная статья, которая рассказываем о применении GraphQL в Android с самого начала.
Автор делится своими размышлениями о том, что такое GraphQL, какие есть преимущества над обычными REST API, а также что выбрать для того, чтобы добавить эту либу в своё приложение.
Крайне рекомендую, ведь инструмент очень полезный.
👍4
Understanding Gradle - The Fundamentals
#новичкам #gradle
Gradle частенько вызывает непонимание не только у новичков, но и у опытных разработчиков. Ведь сама структура файлов отличается от той, что мы привыкли видеть в проекте, да и язык программироания может отличаться, если говорить о groovy.
Вот вам годный курс о том, как использовать Gradle в проекте. И тут можно встретить всё, что нужно, начиная от именования файлов и ресурсов и заканчивая написанием собственных тасок и публикацией своих библиотек.
Отличный курс для новичков, не так часто встретишь что-то действительно хорошее в видео формате.
#новичкам #gradle
Gradle частенько вызывает непонимание не только у новичков, но и у опытных разработчиков. Ведь сама структура файлов отличается от той, что мы привыкли видеть в проекте, да и язык программироания может отличаться, если говорить о groovy.
Вот вам годный курс о том, как использовать Gradle в проекте. И тут можно встретить всё, что нужно, начиная от именования файлов и ресурсов и заканчивая написанием собственных тасок и публикацией своих библиотек.
Отличный курс для новичков, не так часто встретишь что-то действительно хорошее в видео формате.
👍15🔥4
Высокая производительность с Kotlin
#kotlin
Думаю, что не открою секрет, если скажу, что пользователям важно хорошо работающее приложение. Конечно, есть исключения в виде приложений, которые работают ужасно, но при этом имеют массу положительных отзывов: видимо, польза от них перевешивает их отвратительную работу и качество. 🤫
Но всё же, если говорить про нас, разработчиков, то мы должны стараться делать максимально качественные приложения и отслеживать необходимые метрики для того, чтобы понять, что с нашим приложением что-то не так.
Вот вам статья, где автор рассказывает о том, что в себя включает понятие «производительность», на какие вещи стоит обратить внимание нам, а также какие средства языка Kotlin использовать, чтобы писать более эффективный код.
Советы крутые, можно найти для себя полезные штуки 🔥.
#kotlin
Думаю, что не открою секрет, если скажу, что пользователям важно хорошо работающее приложение. Конечно, есть исключения в виде приложений, которые работают ужасно, но при этом имеют массу положительных отзывов: видимо, польза от них перевешивает их отвратительную работу и качество. 🤫
Но всё же, если говорить про нас, разработчиков, то мы должны стараться делать максимально качественные приложения и отслеживать необходимые метрики для того, чтобы понять, что с нашим приложением что-то не так.
Вот вам статья, где автор рассказывает о том, что в себя включает понятие «производительность», на какие вещи стоит обратить внимание нам, а также какие средства языка Kotlin использовать, чтобы писать более эффективный код.
Советы крутые, можно найти для себя полезные штуки 🔥.
🔥7👍2
Jira на Github Actions
#cicd
Я тут последние несколько дней активно вникаю в тему настройки CI на Github Actions, и был удивлён, что в Jira нельзя передвинуть несколько задач одновременно, если вы каким-то образом получили этот список из вашего PR.
Ребята из Attlassian молчат, а таски двигать хочется, поэтому делюсь с вами кастомным решением.
Если посмотреть, что делается под капотом этого Action, то по сути — это вызов API и совершение парочки запросов для того, чтобы передвигуть задачку. Свой Action писать не хотелось, поэтому решил написать свою gradle таску, которая сделает всё за нас.
1️⃣ Для начала, выполните запрос:
чтобы получить идентификатор колонки, в которую вам надо перекинуть задачу. Нам надо поле id, а чтобы выполнить запрос — необходимо создать пароль в настройках и авторизоваться в Headers через Base Auth.
2️⃣ Создаём таску в gradle, а в неё передаём список задач и токен для авторизации будущих запросов, например так:
Лучше передать сразу base64 от нашей базовой авторизации, а сам токен хранить в secrets на вашем CI.
3️⃣ Выполняем запрос:
Если вы всё сделали правильно, то вы получите 204 код и ваша задача перейдёт в нужную вам колонку. 😌
Дальше можно выполнить эту таску на CI:
Полный текст таски можно взять тут.
#cicd
Я тут последние несколько дней активно вникаю в тему настройки CI на Github Actions, и был удивлён, что в Jira нельзя передвинуть несколько задач одновременно, если вы каким-то образом получили этот список из вашего PR.
Ребята из Attlassian молчат, а таски двигать хочется, поэтому делюсь с вами кастомным решением.
Если посмотреть, что делается под капотом этого Action, то по сути — это вызов API и совершение парочки запросов для того, чтобы передвигуть задачку. Свой Action писать не хотелось, поэтому решил написать свою gradle таску, которая сделает всё за нас.
1️⃣ Для начала, выполните запрос:
GET https://domain.atlassian.net/rest/api/3/issue/TASK-123/transitions
, чтобы получить идентификатор колонки, в которую вам надо перекинуть задачу. Нам надо поле id, а чтобы выполнить запрос — необходимо создать пароль в настройках и авторизоваться в Headers через Base Auth.
2️⃣ Создаём таску в gradle, а в неё передаём список задач и токен для авторизации будущих запросов, например так:
def taskNumbers = project.properties['items'].split(',').toUnique()
def jiraToken = project.properties['jira_token’]
.Лучше передать сразу base64 от нашей базовой авторизации, а сам токен хранить в secrets на вашем CI.
3️⃣ Выполняем запрос:
for(taskNumber in taskNumbers) {
def body = "{ \"transition\": { \"id\": \"$transactionId\" } }"
def req = new URL("https://domain.atlassian.net/rest/api/3/issue/TASK-$taskNumber/transitions").openConnection()
req.setRequestMethod("POST")
req.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
req.setRequestProperty("Authorization", "Basic $jiraToken")
req.setDoOutput(true)
req.getOutputStream().write(body.getBytes("UTF-8"))
println "Status code: ${req.getResponseCode()} for task $taskNumber"
}
Если вы всё сделали правильно, то вы получите 204 код и ваша задача перейдёт в нужную вам колонку. 😌
Дальше можно выполнить эту таску на CI:
./gradlew moveJiraTasks -Pitems=123,456 -Pjira_token=token
Полный текст таски можно взять тут.
👍11
JankStats Library
#library
Тут появилась любопытная библиотека от Google для анализа производительности приложений — JankStats.
Суть библиотеки заключается в получении информации о производительности рендеринга внутри приложения и получения информации о каких-то проблемах, если они есть.
Под капотом используется в том числе FrameMetrics API, которое как раз и даёт информацию о том, сколько времени нужно было для отрисовки конкретного кадра.
Выглядит довольно интересно, но пока тащить в свой проект рановато, так как эта только первая альфа. Подробнее о том, что делает либа можно почитать тут, а чуть больше документации тут.
#library
Тут появилась любопытная библиотека от Google для анализа производительности приложений — JankStats.
Суть библиотеки заключается в получении информации о производительности рендеринга внутри приложения и получения информации о каких-то проблемах, если они есть.
Под капотом используется в том числе FrameMetrics API, которое как раз и даёт информацию о том, сколько времени нужно было для отрисовки конкретного кадра.
Выглядит довольно интересно, но пока тащить в свой проект рановато, так как эта только первая альфа. Подробнее о том, что делает либа можно почитать тут, а чуть больше документации тут.
👍11
Ruler от Spotify
#tools
Тут ребята из Spotify поделились любопытной наработкой для определения размера текущего apk-файла и его детального анализа.
Вообще размер apk — довольно важная метрика для приложения, ведь далеко не везде есть дешёвый и стабильный Интернет, поэтому потенциальные пользователи могут запросто отказаться от загрузки приложения, если его размер будет слишком большим.
Сейчас самыми распространёнными решениями для анализа размера приложения являются встроенный анализатор в Android Studio и Diffuse. Однако, они могут давать довольно поверхностную информацию, если ваше приложение состоит из большого числа модулей, как это было в случае со Spotify.
Альтернатива — их собственное решение, которое называется Ruler. Выглядит всё довольно хорошо: на выходе получается html-страничка с детальной информацией о состоянии приложения, учитываются модули и разные бандлы для конкретной версии устройства.
#tools
Тут ребята из Spotify поделились любопытной наработкой для определения размера текущего apk-файла и его детального анализа.
Вообще размер apk — довольно важная метрика для приложения, ведь далеко не везде есть дешёвый и стабильный Интернет, поэтому потенциальные пользователи могут запросто отказаться от загрузки приложения, если его размер будет слишком большим.
Сейчас самыми распространёнными решениями для анализа размера приложения являются встроенный анализатор в Android Studio и Diffuse. Однако, они могут давать довольно поверхностную информацию, если ваше приложение состоит из большого числа модулей, как это было в случае со Spotify.
Альтернатива — их собственное решение, которое называется Ruler. Выглядит всё довольно хорошо: на выходе получается html-страничка с детальной информацией о состоянии приложения, учитываются модули и разные бандлы для конкретной версии устройства.
🔥10👍4
Контракт для работы Android и Design команд
#design
Лайтовая статья, где автор делится советами для организации работы команды дизайнеров и разработчиков.
Многие советы довольно очевидные, но, возможно вы узнаете описанные проблемы и у себя в команде.
Например, это дублирование цветов, которое возникает из-за отсутствия единых названий в Figma, или некорректное использование шрифтов, из-за чего некоторые заголовки выпадают из единого стиля приложения.
Советы довольно простые в использовании, но экономят кучу времени. Ссылка на статью тут.
#design
Лайтовая статья, где автор делится советами для организации работы команды дизайнеров и разработчиков.
Многие советы довольно очевидные, но, возможно вы узнаете описанные проблемы и у себя в команде.
Например, это дублирование цветов, которое возникает из-за отсутствия единых названий в Figma, или некорректное использование шрифтов, из-за чего некоторые заголовки выпадают из единого стиля приложения.
Советы довольно простые в использовании, но экономят кучу времени. Ссылка на статью тут.
👍6👎1
Kotlin Multiplatform — ATOM
#kmm
Тут ребята из Jetbrains сделали новый подскаст, где будут делиться последними новостями из мира KMM.
Обещают, что выпуски будут появляться раз в месяц, и уже доступен первый из них.
Обсуждают изменения в KMM за последний год, Compose, планы по выходу в бета и другие фичи, так что выглядит весьма здоровски.
#kmm
Тут ребята из Jetbrains сделали новый подскаст, где будут делиться последними новостями из мира KMM.
Обещают, что выпуски будут появляться раз в месяц, и уже доступен первый из них.
Обсуждают изменения в KMM за последний год, Compose, планы по выходу в бета и другие фичи, так что выглядит весьма здоровски.
👍9
Процесс сборки Android
#android
Довольно хороший набор статей, где автор делится о том, как происходит процесс сборки ваших приложений под Android: как устроена компиляция ресурсов приложения, исходного кода, оптимизация ресурсов и т.д.
Вдогонку — отличная статья, где автор говорит о том, что происходит в системе Android, когда пользователь нажимает на кнопку открытия приложения.
#android
Довольно хороший набор статей, где автор делится о том, как происходит процесс сборки ваших приложений под Android: как устроена компиляция ресурсов приложения, исходного кода, оптимизация ресурсов и т.д.
Вдогонку — отличная статья, где автор говорит о том, что происходит в системе Android, когда пользователь нажимает на кнопку открытия приложения.
👍17
Koin 3.2 Beta & Roadmap на 2022
#koin #kotlin
Тут не так давно опубликовали Roadmap для весьма крутой и популярной библиотеки для DI — Koin.
Во-первых, теперь выпуск новой версии будет происходить раз в полгода, примерно как это делает Kotlin. То есть в этом году будет прекращена поддержка 2.x версий, 3.1.x до конца первого квартала этого года, а 3.2 скоро станет основной. Подобные циклы релизов позволят более планомерно обновлять эту библиотеку у себя в проекте.
Во-вторых, у Koin появилась спонсорская поддержка от компании Kotzilla, что даёт возможность тратить больше времени на разработку и поддержку этого проекта.
Ну и обновления в версии 3.2: появилась фича, называемая constructor DSL , которая позволяет добавлять компоненты без исполозования функции get(), добавляя всё только по имени класса.
Многомодульным проектам пригодится фича с include для модулей, что даёт более гибкую настройку зависимостей.
Также добавилась поддержка новой Kotlin Native Memory Model.
Больше про изменения можно почитать тут.
#koin #kotlin
Тут не так давно опубликовали Roadmap для весьма крутой и популярной библиотеки для DI — Koin.
Во-первых, теперь выпуск новой версии будет происходить раз в полгода, примерно как это делает Kotlin. То есть в этом году будет прекращена поддержка 2.x версий, 3.1.x до конца первого квартала этого года, а 3.2 скоро станет основной. Подобные циклы релизов позволят более планомерно обновлять эту библиотеку у себя в проекте.
Во-вторых, у Koin появилась спонсорская поддержка от компании Kotzilla, что даёт возможность тратить больше времени на разработку и поддержку этого проекта.
Ну и обновления в версии 3.2: появилась фича, называемая constructor DSL , которая позволяет добавлять компоненты без исполозования функции get(), добавляя всё только по имени класса.
Многомодульным проектам пригодится фича с include для модулей, что даёт более гибкую настройку зависимостей.
Также добавилась поддержка новой Kotlin Native Memory Model.
Больше про изменения можно почитать тут.
👍8🔥1
Kotlin: парочку best practices
#kotlin
Подобных статей бывает довольно много, но описанные в этой советы могут быть полезны тем, кто совсем недавно начал программировать на Android. Ну и можно проверить себя, вдруг описанные советы не применялись на практике.
Описывать всё, что есть долго, поэтому вот вам ссылка на статью, где много примеров кода и отличных советов.
#kotlin
Подобных статей бывает довольно много, но описанные в этой советы могут быть полезны тем, кто совсем недавно начал программировать на Android. Ну и можно проверить себя, вдруг описанные советы не применялись на практике.
Описывать всё, что есть долго, поэтому вот вам ссылка на статью, где много примеров кода и отличных советов.
👍8👎3
Rich Text в Jetpack Compose
#jetpack #compose
Тут подписчик подкинул классную статью, где довольно исчерпывающе описываются возможности для применения стилей текста в Jetpack Compose.
Вообще, форматирование текста очень важная штука, ведь сейчас всё больше пользователей не читает контент, а сканирует его, пытаясь найти то, что им будет полезно.
Автор рассказывает про множество свойств текста, использование
#jetpack #compose
Тут подписчик подкинул классную статью, где довольно исчерпывающе описываются возможности для применения стилей текста в Jetpack Compose.
Вообще, форматирование текста очень важная штука, ведь сейчас всё больше пользователей не читает контент, а сканирует его, пытаясь найти то, что им будет полезно.
Автор рассказывает про множество свойств текста, использование
TextStyle
, добавление стилей через AnnotatedString
.👍3
Используйте Data Classes вместо Pairs
#kotlin
В языке Kotlin, да и не только в нём, есть классы, которые называются
Главная проблема состоит в том, что их очень не просто читать в коде. Например, мы хотим использовать сущность для передачи
Используем функцию:
При вызове функции мы получаем:
Если добавить ещё и третий объект, то читать становится ещё сложнее.
Решение — как можно меньше использовать
Чуть больше примеров кода можно найти тут.
#kotlin
В языке Kotlin, да и не только в нём, есть классы, которые называются
Pair
и Tripple
. По сути, они созданы для того, чтобы передавать два или три объекта.Главная проблема состоит в том, что их очень не просто читать в коде. Например, мы хотим использовать сущность для передачи
Coffee
, описывая его размер и обжарку. Используем функцию:
fun getCoffee(): Pair<Roast, Size>
При вызове функции мы получаем:
val coffee = getCoffee()
print(“A ${coffee.second}, ${coffee.first} roast coffee.“)
Если добавить ещё и третий объект, то читать становится ещё сложнее.
Решение — как можно меньше использовать
Pair
, а вместо него использовать data-классы. Да, придётся создать дополнительный класс, однако вы получите бонусы в виде нормальной читаемости кода и возможности быстро его расширить. Чуть больше примеров кода можно найти тут.
👍14❤5👎1
Annotations для Koin
#koin
Тут недавно появилась новость о новом проекте от создателей Koin — Annotations. Теперь отдельной зависимостью можно добавить возможность создавать модули и компоненты при помощи аннотаций. Всё также работает и в KMM.
Есть
Очень рад, что проект Koin развивается, да и фича может быть особенно полезной в больших проектах, где создавать каждый компонент вручную может быть напряжно. Подробнее прочитать про изменения можно тут.
#koin
Тут недавно появилась новость о новом проекте от создателей Koin — Annotations. Теперь отдельной зависимостью можно добавить возможность создавать модули и компоненты при помощи аннотаций. Всё также работает и в KMM.
Есть
@Single,
@Factory,
@KoinViewModel,
@Scoped
, а сама библиотека уже в стадии beta. Обещают, что аннотации фактически никак не повлияют на время сборки проекта, хотя обязательно надо посмотреть, как оно будет на практике. Очень рад, что проект Koin развивается, да и фича может быть особенно полезной в больших проектах, где создавать каждый компонент вручную может быть напряжно. Подробнее прочитать про изменения можно тут.
👍12
Play Time with Jetpack Compose
#jetpack #compose
Тут команда Google делится интересным опытом перехода от старого подхода на xml на Jetpack Compose.
Думаю, что далеко не каждое приложение может похвастаться таким сроком жизни и количеством пользователей. Кодовая база приложения составляет больше 10 лет работы, и за это время накопилось огромное количество технического долга, который необходимо было заплатить.
Ребята решили переписать UI на Jetpack Compose, и у них получилось значительно уменьшить кодовую базу, примерно на 50%. Также ощутимо выросла продуктивность при написании кода и производительность всего приложения, в том числе анимаций.
Что ж, ещё один позитивный кейс в копилку успешного перехода на Compose, и очень здорово, что он становится всё более распространённым.
#jetpack #compose
Тут команда Google делится интересным опытом перехода от старого подхода на xml на Jetpack Compose.
Думаю, что далеко не каждое приложение может похвастаться таким сроком жизни и количеством пользователей. Кодовая база приложения составляет больше 10 лет работы, и за это время накопилось огромное количество технического долга, который необходимо было заплатить.
Ребята решили переписать UI на Jetpack Compose, и у них получилось значительно уменьшить кодовую базу, примерно на 50%. Также ощутимо выросла продуктивность при написании кода и производительность всего приложения, в том числе анимаций.
Что ж, ещё один позитивный кейс в копилку успешного перехода на Compose, и очень здорово, что он становится всё более распространённым.
👍8
Gradle Plugins
#gradle
В мире Android существует довольно плохо освещённая тема — написание плагинов к Gradle. Для многих разработчиков написание своих плагинов выглядит крайне сложным и непонятным. Поэтому, мы часто просто забиваем на этот довольно полезный инструмент, который может помочь оптимизировать много рутинных действий.
Автор статьи помогает разобраться с написанием плагинов и даёт не мало полезных штук из своего опыта: с чего начать писать плагины, насколько это сложно, какие есть инструменты и т.д.
Крайне рекомендую почитать, уверен, что вы найдёте то, что можно оптимизировать и у себя. 👍
#gradle
В мире Android существует довольно плохо освещённая тема — написание плагинов к Gradle. Для многих разработчиков написание своих плагинов выглядит крайне сложным и непонятным. Поэтому, мы часто просто забиваем на этот довольно полезный инструмент, который может помочь оптимизировать много рутинных действий.
Автор статьи помогает разобраться с написанием плагинов и даёт не мало полезных штук из своего опыта: с чего начать писать плагины, насколько это сложно, какие есть инструменты и т.д.
Крайне рекомендую почитать, уверен, что вы найдёте то, что можно оптимизировать и у себя. 👍
👍8
Notification runtime permission Android 13
#android
Не успели большинство телефонов обновиться до Android 12, как нам уже нужно думать о новом обновлении на Android 13. 🤔
Одним из важных обновлений в новой ОС будет запрос разрешений на отправку пользователю уведомлений от приложения. Штука очень важная☝️ да и обработка выглядит совсем не сложной.
Вот небольшой гайд о том, как лучше обработать показ разрешений пользователю.
#android
Не успели большинство телефонов обновиться до Android 12, как нам уже нужно думать о новом обновлении на Android 13. 🤔
Одним из важных обновлений в новой ОС будет запрос разрешений на отправку пользователю уведомлений от приложения. Штука очень важная☝️ да и обработка выглядит совсем не сложной.
Вот небольшой гайд о том, как лучше обработать показ разрешений пользователю.
😢10👍5😱2
Pixel perfect Android app
#design #android
Для многих не станет новостью то, что хороший дизайн — это важная часть приложения.
Я согласен с тезисом, что пользователи будут пользоваться вашим приложением несмотря на то, какой у него дизайн, если оно решает их насущную проблему.
Мне встречалось очень много подобных приложений, однако мне кажется, что если появится приложение, которое делает примерно то же самое, но с более удобным дизайном, то есть большая вероятность, что часть пользователей перейдёт именно туда.
Тестирование хорошего UI/UX — это не самая простая задача: у нас есть много локалей, различных размеров шрифта, тёмная и светлая тема, ориентации.
Вот полезная статья, где описываются инструменты, при помощи которых можно протестировать все эти штуки.
Из неё узнал о существовании языков с псевдолокалями, которые добавляют в привычный нам язык диалекты, а также то, что, например, немецкий язык содержит примерно на 30% больше текста, чем остальные языки. 🥸
Так что — самое время посмотреть, не разорвало ли ваши
#design #android
Для многих не станет новостью то, что хороший дизайн — это важная часть приложения.
Я согласен с тезисом, что пользователи будут пользоваться вашим приложением несмотря на то, какой у него дизайн, если оно решает их насущную проблему.
Мне встречалось очень много подобных приложений, однако мне кажется, что если появится приложение, которое делает примерно то же самое, но с более удобным дизайном, то есть большая вероятность, что часть пользователей перейдёт именно туда.
Тестирование хорошего UI/UX — это не самая простая задача: у нас есть много локалей, различных размеров шрифта, тёмная и светлая тема, ориентации.
Вот полезная статья, где описываются инструменты, при помощи которых можно протестировать все эти штуки.
Из неё узнал о существовании языков с псевдолокалями, которые добавляют в привычный нам язык диалекты, а также то, что, например, немецкий язык содержит примерно на 30% больше текста, чем остальные языки. 🥸
Так что — самое время посмотреть, не разорвало ли ваши
View
на некоторых из языков.👍7