Вышел #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 совместимом устройстве.
#Firebase #Predictions
Firebase - это прекрасный набор сервисов для создания мобильных приложений. Теперь в релиз вышел ещё один из них Predictions.
Этот сервис позволяет на основе машинного обучения сегментирование пользователей на основе их будущего поведения. В итоге полученные группы могут использоваться для таргетированная #RemoteConfig, #CloudMessaging, #InAppMessaging и A/B Testing.
Релиз Predictions также добавил новых функций:
* Prediction Health - позволяет понять насколько точным является предсказание поведения, смотреть информацию о сегментах и на основе каких данных они были созданы
* Export to BigQuery
Подробности в статье
"Predictions graduates to general availability to provide smarter user segmentation"
Firebase - это прекрасный набор сервисов для создания мобильных приложений. Теперь в релиз вышел ещё один из них Predictions.
Этот сервис позволяет на основе машинного обучения сегментирование пользователей на основе их будущего поведения. В итоге полученные группы могут использоваться для таргетированная #RemoteConfig, #CloudMessaging, #InAppMessaging и A/B Testing.
Релиз Predictions также добавил новых функций:
* Prediction Health - позволяет понять насколько точным является предсказание поведения, смотреть информацию о сегментах и на основе каких данных они были созданы
* Export to BigQuery
Подробности в статье
"Predictions graduates to general availability to provide smarter user segmentation"
The Firebase Blog
Predictions graduates to general availability to provide smarter user segmentation
Last year at Firebase Summit, we introduced you to Predictions, a machine learning product that helps you smartly segment your users based on their predicted future behavior. Without requiring anyone on your app team to have ML expertise, Predictions gives…
Замечательный парень Jake Warton, сделавший для Android сообщества множества полезных вещей, и я уверен, что библиотека в разработке которой он принимал участие есть в 99% проектов на Android.
Выступил с замечательным докладом на Droidcon London и рассказал о том, как сделать вашу жизнь с #Dagger лучше.
Выступил с замечательным докладом на Droidcon London и рассказал о том, как сделать вашу жизнь с #Dagger лучше.
#AssistedInjection
Позволяет эффективно передавать параметры в ваши зависимости. Например, когда у вас есть Presenter, ViewModel и пр в которую вам надо передать id данных, отображаемых на текущем экране. В чистом Dagger это делается через костыли, описываемое решение позваоляет избавиться от Subcomponent, lateinit и пр. в пользу генерируемых Factory.
https://github.com/square/AssistedInject
Позволяет эффективно передавать параметры в ваши зависимости. Например, когда у вас есть Presenter, ViewModel и пр в которую вам надо передать id данных, отображаемых на текущем экране. В чистом Dagger это делается через костыли, описываемое решение позваоляет избавиться от Subcomponent, lateinit и пр. в пользу генерируемых Factory.
https://github.com/square/AssistedInject
GitHub
GitHub - cashapp/InflationInject: Constructor-inject views during XML layout inflation
Constructor-inject views during XML layout inflation - cashapp/InflationInject
не смущайтесь версии 0.3.0. Jake не готов сделать ее 1.0 из-за пустяков. Она полностью стабильно по его заявлению.