Про использование FTS с Room можно почитать в
Enabling SQLite FTS in Room 2.1 by Siena Aguayo https://link.medium.com/qOCpVCFcMR
Enabling SQLite FTS in Room 2.1 by Siena Aguayo https://link.medium.com/qOCpVCFcMR
Medium
Enabling SQLite FTS in Room 2.1
I was so very fortunate to be able to attend the Android Dev Summit in Mountain View this week, where one announcement in particular…
#coroutines #room
Поддержку корутин пока не привезли (, но учитывая что Yigit и сообщество в целом топит за это, надеюсь увидеть в Room 2.2 поддержку
Поддержку корутин пока не привезли (, но учитывая что 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
DiffUtil для RecyclerView позволяют эффективно и просто изменять контент списков с анимацией, но её расчёт может занимать большой кусок времени и эту работу рекомендуется отправлять в фоновый поток. И конечно стоит использовать для этого корутины. Я потратил пару минут на чтение статьи отJag Saund о том как эта задача просто решается.
https://proandroiddev.com/better-recyclerview-with-asynchronous-diffutil-and-kotlin-coroutines-f67e4f366cda
Medium
Asynchronous DiffUtil with Kotlin Coroutines
Take advantage of Coroutines to make your DiffUtil asynchronous
Мир разработки меняется очень интенсивно: появляются новые технологие, одни фреймворки сменяют другие, а библиотеки улучшают то что делали старые, либо вовсе делают что неемоверно крутое. Как найти все самое интересно? Как не потеряться во множестве новостей. Этот канал предназначен чтобы помочь вам в фильтрации контента.
Обсуждения контента и предложения происходят в канале @android_broadcast_discussions
Обсуждения контента и предложения происходят в канале @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
Самые основные изменения:
* Функция с именем "contract" теперь может быть объявлена
* Исправлен баг с обработкой аннотаций в runtime
* Исправлены баги инкреметной компиляции
* Исправлены баги в IDE
* Исправлены баги в Gradle плагине
Подробности
https://github.com/JetBrains/kotlin/releases/tag/v1.3.10
GitHub
Release 1.3.10 · JetBrains/kotlin
Content
The release contains the JVM version of Kotlin compiler and also one native system dependent version for every major platform (Linux, macOS, and Windows). Those binaries are built with Exce...
The release contains the JVM version of Kotlin compiler and also one native system dependent version for every major platform (Linux, macOS, and Windows). Those binaries are built with Exce...
На #AndroidDevSummit18 были доклады, которые очень хорошо смогли структурировать знания по теме. Примером такого доклада является «Files for Miles».
В рамках доклада спикер рассказал о
* Разных папках с файлами в Android и для чего они служат
* Storage Access Framework
* Direct Boot: Device и Credentials Protected Storage, как работать с ними и когда использовать
* Принципы работы кэша приложения: выделения памяти, новые принципы очистки кэша приложений, работа в Android с лимитами в кэше
* Очистка памяти на диске при необходимости (например загрузке большого файла)
* Шаринг фалов
* Рекомендации по работе с файлами через JNI
В рамках доклада спикер рассказал о
* Разных папках с файлами в Android и для чего они служат
* Storage Access Framework
* Direct Boot: Device и Credentials Protected Storage, как работать с ними и когда использовать
* Принципы работы кэша приложения: выделения памяти, новые принципы очистки кэша приложений, работа в Android с лимитами в кэше
* Очистка памяти на диске при необходимости (например загрузке большого файла)
* Шаринг фалов
* Рекомендации по работе с файлами через JNI
CTO Id Finance поделился опытом Павел Шарейко поделился полезными "вредными" советами : 12 советов что стоит делать, если вы нацелены развалить вашу компанию и продуктивную разработку.
Это статьей мне напомнили книжку "Вредные советы" Григория Остера 😁
https://dev.by/news/id-finance-cto
Это статьей мне напомнили книжку "Вредные советы" Григория Остера 😁
https://dev.by/news/id-finance-cto
dev.by
«Тащите все новые технологии к себе — и создайте зоопарк». Очень вредные советы от CTO «самого горячего» белорусского финтех-стартапа…
Журнал Wired недавно включил финтех-компанию ID Finance в топ-100 «самых горячих стартапов Европы». Продукты компании разрабатывают в Минске, в здешнем R&D — 200 человек. CTO Павел Шарейко рассказывает, чего ни в коем случае не надо делать.
Встречайте новый выпуск Android Dev Подкаста. Речь на этот раз пойдет о архитектуре, а именно о MVI от Mosby.
Android Dev Подкаст. Выпуск 79. MVI против всех - Подкасты Android Dev
https://androiddev.apptractor.ru/android-dev-podkast-79/
https://androiddev.apptractor.ru/android-dev-podkast-79/
Отрисовка текста одна из самых тяжёлых графических операций: она требует расчета текста на основе шрифта, размера текста, длины строки, переносов и прочих параметров. Поэтому важно заботиться о том чтобы при наличие большого количества теста на экране (например отображение большой статьи либо списка с множеством элементов в каждом из которых содержится текст). Для того чтобы оптимизировать отображение текста если следующие приемы:
* Отключение автоматического переноса на новую строку слов (нужно смотреть подходит ли это для вас, по умолчанию опция включена)
* #PrecomputedText - асинхронная подготовка текста для отрисовки (доступна в #AndroidX)
* Использование #Prefetch в #RecyclerView
* Разбиение большого текста на части и отображение их в #RecyclerView (к сожалению, будут проблемы с выделением на стыке частей)
Такие оптимизации позволяют ускорить отображение текста на Main Thread до 0.2-0.4 секунды вместо нескольких
* Отключение автоматического переноса на новую строку слов (нужно смотреть подходит ли это для вас, по умолчанию опция включена)
* #PrecomputedText - асинхронная подготовка текста для отрисовки (доступна в #AndroidX)
* Использование #Prefetch в #RecyclerView
* Разбиение большого текста на части и отображение их в #RecyclerView (к сожалению, будут проблемы с выделением на стыке частей)
Такие оптимизации позволяют ускорить отображение текста на Main Thread до 0.2-0.4 секунды вместо нескольких
Подробнее на эту тему рекомендую посмотреть
https://youtu.be/vXqwRhjd7b4
https://youtu.be/vXqwRhjd7b4
YouTube
Use Android text like a pro (Android Dev Summit '18)
Text layout has high impact on almost every application's performance. This talk covers common usage patterns of text in Android apps and common pitfalls developers fall into that can be avoided, emphasizing performance issues and how to avoid them. We will…
Автор: @ArtemBagritsevich
#ArchitectureComponents - это уже некий стандарт в Android разработке, поэтому разработчики допускают много ошибок, в связи с чем есть паттерны, котрых надо придерживаться, и антипаттерны, которых надо избегать, при работе с этим компонентом.
Что важно знать о работе с #LiveData, чем поделились на #AndroidDevSummit18:
* LiveData - это не Stream (или Observable из Rx), а скорее Holder значения.
* Не стоит создавать дополнительный lifecycle внутри #ViewModel, лучше использовать Transformation. Как пример, приводится оператор map который преобразует #LiveData на слое репозитория в #LiveData c данными с UI слоя, что является более безопасным подходом.
* #MediatorLiveData. Я не являюсь большим поклонником кастомных операторов, так как большинство задач можно решить используя стандартные операторы, однако они приводят пример того как написать map используя MediatorLiveData.
#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 для загрузки больших данных(например json файлов), помните что её назначение это хранение информации и всё что в неё попадёт будет висеть в памяти.
* Стоит два раза подумать перед тем как создать LiveData обзёрвать и влиять на значение которой могут разные объекты, это может привести к конфликтам и морганию UI. Намного лучше создавать разные инстансы LiveData каждый раз, вместо тогоч тобы разделять одну между классами.
* Не стоит возвращать #MutableLiveData так как её можно изменять, используйте #LiveData.
В заключении несколько советов:
* #LiveData создана для конкретной цели, так что если вам нужно проделать цепочку трансформаций, то лучше использовать Rx.
* В случае если #LiveData никак не связана с UI советуют использовать callback-и, хотя я вижу и другие места, где хорошо подходит, но главное - "Всегда думайте перед тем как использовать новодный паттерн во всех частях вашего приложения".
* #LiveData создана для конкретной цели, так что если вам нужно проделать цепочку трансформаций, то лучше использовать Rx.
* В случае если #LiveData никак не связана с UI советуют использовать callback-и, хотя я вижу и другие места, где хорошо подходит, но главное - "Всегда думайте перед тем как использовать новодный паттерн во всех частях вашего приложения".
Личного из моего опыт, часто приходится сталкиватся с тем, что операторы для #LiveData нужны. Не столько много как для Rx, и не такие сложные, но все таки это позволяет упрощать жизнь. В таком случае я рекомендую обратить внимание на библиотеку "Lives".
Эта библиотека содержит все в себе множество операторов (около 20 штук), которыми часто пользуются в Rx и они легкие:
filter() - эмитирует только те значения, которые удовлетворяют предикату
https://github.com/adibfara/Lives
Эта библиотека содержит все в себе множество операторов (около 20 штук), которыми часто пользуются в Rx и они легкие:
filter() - эмитирует только те значения, которые удовлетворяют предикату
val origLiveData = MutableLiveData<Int>()nonNull() - Возвращает NonNullLiveData, которая эмитирует только не null значения
val newLiveData = origLiveData.filter { it > 2 }
https://github.com/adibfara/Lives
GitHub
GitHub - adibfara/Lives: Lives - Android LiveData Extensions for Kotlin and Java
Lives - Android LiveData Extensions for Kotlin and Java - 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 совместимом устройстве.
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 совместимом устройстве.