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

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#AndroidX #ViewPager2 #HowItWorks

ViewPager2 under the Hood

На днях Google представила первую альфа версию ViewPager2. Я писал об это ранее. В статье разбирается как работает под капотом ViewPager2 и каким образом перенесли функциональность ViewPager на RecyclerView.
#Kotlin #NullSafety

Null is your friend, not a mistake

Null - это бич Java разработки или нет? Очень неприятно когда у вас падает NPE 😞. Чтобы это исправить было сделано много разных решений:
👉 @Nullable, @NonNull аннотации
👉 Optional Java 8
👉 Невозможность работы с null, например RxJava 2 типы не могут эмитировать null значения
👉 Куча if(value != null)
👉 Статические анализаторы кода

Все решения имеют свои плюсы + работают не всегда.

Kotlin решил эту проблемы намного изящнее все типы делятся на Nullable и NonNullable, который четко определяют можно ли быть у вас null значение в типе и при обращение будет заставлять обрабатывать.

Роман Элизаров (папка Kotlin Coroutines) в статье рассказывает почему null - это не есть зло и как Kotlin эффективно организовал работу с такими типами значений!
#RecyclerView #Animation #DiffUtil

RecyclerView — time to animate! (with payloads and DiffUtil)

Что вы знаете о payload в RecyclerView.Adapter.notifyItemChanged(int position, Object payload) ? Она позволяет вам сообщать что изменилось, а не заставляет обновить целый элемент в RecyclerView. DiffUtil также поддерживаются payload и позволяет вам точечно обновлять элементы списка.

В статье раскрываются подробности как анимировать изменения RecyclerView на основе описанного механизма.
#R8 #Optimizations #String

R8 Optimization: String Constant Operations

Продолжение серии статей от Jake Wharton о оптимизациях в R8. В новой статье рассказывает о оптимизация строковых констант:
👉 Операции со строками
👉 Встраивание
👉 Оценка эффективности оптимизаций
#IoT #AndroidThings

An Update on Android Things

Google меняет фокус Android Things как платформу для OEM партнеров для того чтобы делать умные колонки и дисплее.
#Architecture #RIBs

RIBs - Uber's cross-platform mobile architecture framework

Uber открыла доступ к своей библиотеке RIBs, которая позволяет создавать кросс-платформенную архитектуру для Android и iOS приложений. Фреймворк разрабатывался для мобильных приложений с большим количеством разработчиков.

Остается ждать насколько она приживётся
👍1
#LibUpdates #ButterKnife #JakeWharton

ButterKnife 10.1.0 was released

Вышло обновление ButterKnife 10.1.0. Что нового:
👉 Слушатель для OnLongClickListener больше не требует возвращения boolean и может возвращать void
👉 Добавлена поддержка @OnTextChanged и @OnPageChange в butterknife-reflect
👉 Улучшения в butterknife-reflect
#ThreeTen #Backport #JakeWharton

ThreeTenABP 1.1.2

Вышло очередное обновление ThreeTenABP - обертка библиотеки ThreeTen бекпорта Java 8 Data/Time API. Релиз обновил базу данных по временным зонам и обновил базируемую версию ThreeTen до 1.3.8
Forwarded from The Daily Kotlin (Ruslan Ibragimov)
This media is not supported in your browser
VIEW IN TELEGRAM
А Kotlin уже три годика 🎉
#Retrofit #Coroutines #Kotlin

Retrofit meets coroutines

В Retrofit приходит официальная поддержка Coroutines от автор библиотеки. Пока изменения доступны только в snapshot версии, но уже в следующем релизе их можно будет начать корутинить ваши REST интерфейсы.

Появились новые возможности:
1️⃣ suspend функция Call<T>.await() : T
2️⃣ suspend функция Call<T>.awaitResponse(): Response<T>
3️⃣ Добавление suspend непосредственно к функции в интерфейсе

Выглядеть использование будет так:

interface SpaceXApi {
@GET("rockets")
suspend fun getRockets(): Call<List<Rocket>>
}

val api = retrofit.create<SpaceXApi>()

runBlocking {
val rockets = api.getRockets()
rockets.forEach(::println)
}
#AlarmManager

Using AlarmManager like a pro

В приложениях бывает необходимым вызывать событие в определенное время или с периодичностью, независимо от работы приложения. Для в Android служит AlarmManager. Но он имеет много подводных камней:
👉 Время срабатывания вызова не является гарантировано точным
👉 Особенности работы в режиме при ограничение системой потребления энергии (Doze, App Standby, Adaptive Battery и пр.)
👉 Сброс всех alarm при перезагрузке устройства и смене времени
👉 При создание alarm в прошлом он сработает мгновенно

В статье описывается решения как правильно восстанавливать alarm при их затирании системой
#RxJava #Lifecycle #Uber

RxJava2 AutoDispose by Uber was opened

Uber открыла доступ к своей библиотеке AutoDispose. Она позволяете автоматически вызывать dispose() вашим Observable

ПОд капотом все выполняется с помощью метода-фабрики autoDisposable() следующим образом:

myObservable
.doStuff()
.as(autoDisposable(this)) // The magic
.subscribe(s -> ...);

Поддерживается основные компоненты Android с жизненным циклом, Architecture Components, RxLifecycle, есть расширения для Kotlin и тестов
#GooglePlay #AndroidVitals

Monitor and improve app performance with Android vitals

Запись доклада от Google Play Console команды, в котором рассказывается как такие факторы как стабильность, рендеринг и потребление батареи влияет на скорость ваших приложений со технической и бизнес сторон.

Также демонстрируется как эффективно использовать информацию из Android Vitals в Google Play консоле для того чтобы понимать производительность вашего приложения и как понять что у вас есть проблемы.

В рамках видео также будет сделано демо Android Vitals
#Kotlin #Coroutines #BestPractices

Android Kotlin Coroutine Best Practices

Рекомендации по использованию корутин:
👉 Обрабатывайте жизненный цикл: необходимо останавливать корутины по выходу из Activity/Fragment
👉 Обрабатывайте исключения
👉 Не используйте напрямую CoroutineDispatcher из Dispatchers. Создавайте интерфейс через который вы будете представлять различные CoroutineDispatcher, а вот в его реализации можете делать брать их уже откуда хотите.
👉 Не забывайте что корутины - это асинхронный подход и не стоит модифицировать данные из нескольких корутин
👉 Правильно настраивайте правила для ProGuard
👉 Для обратной совместимости с Java 8+ конвертируете корутины в CompletableFuture с помощью CoroutineScope.future (нужна подключенная библиотека kotlinx-coroutines-jdk8). На Android это будет работать только для Android 7.0+
👉 Многий библиотеки не требуют задание Dispatcher чтобы выполняться в другом потоке, так как они уже по умолчанию внутри себя работают на другом потоке. Например Retrofit
#ProGuard #Kotlin #Coroutines

-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembernames class kotlinx.** { volatile <fields>; }
#AndroidStudio

Is Your Android Studio Always Slow? 🚀Here’s How to Speed Up Immediately

Android Studio (AS) - это не самый быстрый софт. Обрастая новым функционалом каждый релиз, она становится все тяжелее и медленнее. Это печалит всех 😞.

Есть пара рекомендаций, чтобы оптимизировать работу AS:
👉 Отключите неиспользуемые плагины
👉 Используйте Gradle Offline режим
👉 Отключите параллельную режим Gradle
👉 Отключите Instant Run
👉 Используйте физические устройства, а не эмуляторы
#CodeQuality #Facebook #MachineLearning

Facebook Infer is a static analysis tool base on machine learning

Facebook открыла доступ к инструменту статического анализа кода, который использует алгоритмы на основе машинного обучения и позволяет анализировать код, самообучаясь и обнаруживать массу проблем, которые простым статическим анализатором неподвластны.

Описание принципов работу Infer
Попробуйте Infer онлайн
#GooglePlay

Expanding target API level requirements in 2019

Google вновь поднимает target sdk для всех приложений в Google Play. Теперь минимальная версия будет Android 9.0 (API 28) для всех приложений:
С августа - для всех новых
С ноября - для всех обновляемых

Также пользователи будут получать предупреждение при установке приложений, о том что оно не адаптировано под новые версии Android. Работать это будет по следующим правилам:
С августа новые приложения будут получат предупреждения если target sdk < 26 (Android 8.0)
С ноября новые версии существующих приложений получат предупреждения если target sdk < 26
Если версия Android вашего устройства меньше обязательной target sdk, то предупреждения вы не увидите. Каждый год минимальная target sdk будет повышаться до следующей мажорной версии ОС.

Как вы относитесь к таким изменениям?