Android Broadcast – Telegram
Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#coroutines #room
Поддержку корутин пока не привезли (, но учитывая что Yigit и сообщество в целом топит за это, надеюсь увидеть в Room 2.2 поддержку
А пока конвертируем Rx Observable/Flowable в Channel при помощи coroutine-rx2
#coroutines #recyclerview
DiffUtil для RecyclerView позволяют эффективно и просто изменять контент списков с анимацией, но её расчёт может занимать большой кусок времени и эту работу рекомендуется отправлять в фоновый поток. И конечно стоит использовать для этого корутины. Я потратил пару минут на чтение статьи отJag Saund о том как эта задача просто решается.
https://proandroiddev.com/better-recyclerview-with-asynchronous-diffutil-and-kotlin-coroutines-f67e4f366cda
Мир разработки меняется очень интенсивно: появляются новые технологие, одни фреймворки сменяют другие, а библиотеки улучшают то что делали старые, либо вовсе делают что неемоверно крутое. Как найти все самое интересно? Как не потеряться во множестве новостей. Этот канал предназначен чтобы помочь вам в фильтрации контента.

Обсуждения контента и предложения происходят в канале @android_broadcast_discussions
Android Broadcast pinned «Мир разработки меняется очень интенсивно: появляются новые технологие, одни фреймворки сменяют другие, а библиотеки улучшают то что делали старые, либо вовсе делают что неемоверно крутое. Как найти все самое интересно? Как не потеряться во множестве новостей.…»
Вышел #kotlin 1.3.10 который исправляет регрессии в релизе 1.3.0

Самые основные изменения:
* Функция с именем "contract" теперь может быть объявлена
* Исправлен баг с обработкой аннотаций в runtime
* Исправлены баги инкреметной компиляции
* Исправлены баги в IDE
* Исправлены баги в Gradle плагине

Подробности
https://github.com/JetBrains/kotlin/releases/tag/v1.3.10
На #AndroidDevSummit18 были доклады, которые очень хорошо смогли структурировать знания по теме. Примером такого доклада является «Files for Miles».

В рамках доклада спикер рассказал о
* Разных папках с файлами в Android и для чего они служат
* Storage Access Framework
* Direct Boot: Device и Credentials Protected Storage, как работать с ними и когда использовать
* Принципы работы кэша приложения: выделения памяти, новые принципы очистки кэша приложений, работа в Android с лимитами в кэше
* Очистка памяти на диске при необходимости (например загрузке большого файла)
* Шаринг фалов
* Рекомендации по работе с файлами через JNI
Встречайте новый выпуск Android Dev Подкаста. Речь на этот раз пойдет о архитектуре, а именно о MVI от Mosby.
Android Dev Подкаст. Выпуск 79. MVI против всех - Подкасты Android Dev
https://androiddev.apptractor.ru/android-dev-podkast-79/
Отрисовка текста одна из самых тяжёлых графических операций: она требует расчета текста на основе шрифта, размера текста, длины строки, переносов и прочих параметров. Поэтому важно заботиться о том чтобы при наличие большого количества теста на экране (например отображение большой статьи либо списка с множеством элементов в каждом из которых содержится текст). Для того чтобы оптимизировать отображение текста если следующие приемы:
* Отключение автоматического переноса на новую строку слов (нужно смотреть подходит ли это для вас, по умолчанию опция включена)
* #PrecomputedText - асинхронная подготовка текста для отрисовки (доступна в #AndroidX)
* Использование #Prefetch в #RecyclerView
* Разбиение большого текста на части и отображение их в #RecyclerView (к сожалению, будут проблемы с выделением на стыке частей)

Такие оптимизации позволяют ускорить отображение текста на Main Thread до 0.2-0.4 секунды вместо нескольких
Автор: @ArtemBagritsevich

#ArchitectureComponents - это уже некий стандарт в Android разработке, поэтому разработчики допускают много ошибок, в связи с чем есть паттерны, котрых надо придерживаться, и антипаттерны, которых надо избегать, при работе с этим компонентом.

Что важно знать о работе с #LiveData, чем поделились на #AndroidDevSummit18:
* LiveData - это не Stream (или Observable из Rx), а скорее Holder значения.

* Не стоит создавать дополнительный lifecycle внутри #ViewModel, лучше использовать Transformation. Как пример, приводится оператор map который преобразует #LiveData на слое репозитория в #LiveData c данными с UI слоя, что является более безопасным подходом.

* #MediatorLiveData. Я не являюсь большим поклонником кастомных операторов, так как большинство задач можно решить используя стандартные операторы, однако они приводят пример того как написать map используя MediatorLiveData.
Антипатерны:
* Не используйте #LiveData для загрузки больших данных(например json файлов), помните что её назначение это хранение информации и всё что в неё попадёт будет висеть в памяти.

* Стоит два раза подумать перед тем как создать LiveData обзёрвать и влиять на значение которой могут разные объекты, это может привести к конфликтам и морганию UI. Намного лучше создавать разные инстансы LiveData каждый раз, вместо тогоч тобы разделять одну между классами.

* Не стоит возвращать #MutableLiveData так как её можно изменять, используйте #LiveData.
В заключении несколько советов:
* #LiveData создана для конкретной цели, так что если вам нужно проделать цепочку трансформаций, то лучше использовать Rx.
* В случае если #LiveData никак не связана с UI советуют использовать callback-и, хотя я вижу и другие места, где хорошо подходит, но главное - "Всегда думайте перед тем как использовать новодный паттерн во всех частях вашего приложения".
Личного из моего опыт, часто приходится сталкиватся с тем, что операторы для #LiveData нужны. Не столько много как для Rx, и не такие сложные, но все таки это позволяет упрощать жизнь. В таком случае я рекомендую обратить внимание на библиотеку "Lives".

Эта библиотека содержит все в себе множество операторов (около 20 штук), которыми часто пользуются в Rx и они легкие:

filter() - эмитирует только те значения, которые удовлетворяют предикату
val origLiveData = MutableLiveData<Int>()
val newLiveData = origLiveData.filter { it > 2 }

nonNull() - Возвращает NonNullLiveData, которая эмитирует только не null значения

https://github.com/adibfara/Lives
#ProjectTreble - очень хорошая инициатива от Google, представленная на #GoogleIO17, которая позволяет упростить обновление устройств, отделив Android Framework on реализации Vendora: драйверов, работы с новыми датчиками и пр. Применение такого подхода стало обязательным для всех устройств, которые выпускаются с Android O и более новыми версиями ОС.
https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html

В рамках #AndroidDevSummit18 показали преимущества Project Treble - #GenericSystemImage (GSI). Технология позволяет вам запустить голый Android, не дожидаясь обновления от производителя. Производители устройств используют GCI (который строится на последних исходниках #AOSP) для проверки реализации интерфейса производителя на их устройствах.

Это дает разработчикам возможность на чистой версии Android на основе AOSP на любом Treble совместимом устройстве.