Обложка канала

Android Broadcast. Страница 179

Качественная выборка Android Dev новостей, тезисы важных новостей и статей, личное мнение

  • Android Broadcast

    Правильный ответ - "Будет исполнен как освободиться Main поток"

    Если выполнить код
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState
    launch(Dispatchers.Main) {
    log("A")
    }
    log("B")
    }
    В логах вы увидите: BA
  • Android Broadcast

    #Kotlin

    @JvmOverloads for Android Views

    Подробный рассказ о том как для Kotlin функций и конструкторов с аргументами по умолчанию обеспечивать корректную работу на Android на пример собственных View и аннотации @JvmOverloads.
  • Android Broadcast

    #Gradle #Jetifier #AndroidX

    can-i-drop-jetifier Gradle Plugin

    Вы уже перешли в своем проекте с Android Support Library (ASL) на AndroidX? Но вот в чем загвоздка - не все авторы библиотек сделали тоже самое, поэтому вам в код тянутся зависимости ASL.

    Решить эту проблему призвана утилита Jetifier от Google. Она превращает старый ASL код в новый AndroidX, но на такую модификацию байткода требуется время. Но если в вашем проекте уже нет ASL библиотек. то лучше отключить Jetifier.

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

    ./gradlew -Pandroid.enableJetifier=false canIDropJetifier

    Отключение Jetifier для запуска таска - обязательно
  • Реклама

  • Android Broadcast

    #Library #Network #Socket #NIO

    AsyncSocket - Asynchronous socket (client+server) continues communications

    Библиотека, которая простит ваще взаимодействие с сокетами и сделает это эффективно. Она построен на основе Java NIO API, что позволяет выполнять ей I/O операции неблокирующим потоки способом.
  • Android Broadcast

    #NIO #IOwait

    Как решение IOwait можно использовать неблокирующее APO - Java NIO (New I/O), которое использует специальные системные вызовы, которые не блокирует поток при выполнение некоторых I/O операций.
  • Android Broadcast

    #Rx #Coroutines #Concurrency

    Understanding CPU- and I/O-bound for asynchronous operations

    В современных приложениях мы выносим обработку долгих операций на фоновые потоки. Знаете ли Вы какие операции надо запускать на этих пулах потоков, а самое главное почему? Почему не использовать единый пул для всех фоновых операций? Зачем в Kotlin Coroutines и RxJava есть понятия I/O-bound и CPU-bound.

    Причиной этому является как I/O операции ведут себя по сравнению к CPU интенсивным операция. Чтение данных из файлов, потоков, сокетов или сети часто содержит много ожидания: подключение к источнику, дождаться ответа и только потом идет его реальная передача, которая может также приостанавливаться из-за низкой скорости или загруженности. Операции не связанные с чтение не из оперативной памяти вызывают IOwait - системный вызов, который сообщает процессору о необходимости приостановить выполнение текущего потока, пока данные станут доступны или будут успешно переданы.

    Важно помнить, что потоки, выполняющие I/O операции, проводят значительную часть времени в ожидании. При маленьком пуле потоков, выделенных для таких операций у вас может быть простой приложения.

    С другой стороны, если рассмотреть операции которые интенсивно используют CPU, например процессинг изображений, тяжелые расчеты и пр., то для таких операций нет блокирующих событий как IOwait и потоки приостанавливаются только на основе механизма распределения ресурсов в ОС.

    Подведя итоги описанной выше разницы работы задача с IO и CPU можно понять что:
    👉 CPU и I/O операции стоит выполнять в разных пулах потоков
    👉 пул для CPU интенсивных операций должен опираться на количество ядер в устройстве и не превышать его
    👉 пул для I/O операций может быть довольно большим

    Рассмотрим пример:
    1️⃣ Скачаем картинку из сети
    2️⃣ Сделаем ей blur
    3️⃣ Отобразим ее на устройстве

    Мы имеем 3 разных пула, которы надо использовать:
    1️⃣ I/O
    2️⃣ CPU
    3️⃣ Main

    Реализация примера на корутинах:
    launch(Dispatchers.IO) {
    val image = api.fetchImageAsync(url).await()
    val blurred =withContext(Dispatchers.Default) {
    image.blur()

    }
    withContext(Dispatchers.Main) {
    displayImage(blurred)
    }
    }

    Реализация на RxJava:

    api.fetchImageObservable(url)
    .subscribeOn(Schedulers.io()
    .observeOn(Schedulers.computation())
    .map { blurImageSync(it) }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { displayImage(it) }

    В дополнение можно сказать что Coroutine выигрывают еще в том что они не блокируют потоки и позволяют во время ожидания выполняться на них других операциям, что позволяет более эффективно использовать пулл I/O.
  • Android Broadcast

    Скидка на билеты Mobius Piter 2019 по промокоду AndroidBroadcastPromo - 10%🔥
  • Android Broadcast

    #Conference #Mobius

    Mobius Piter 2019

    22-23 мая в Санкт-Петербурге пройдет конференция Mobius в рамках которой вы сможете послушать доклады от спикеров из крупнейших компаний.

    Но самое главное для меня - я выступлю с докладом о лучших практиках в корутинах: как не допустить ошибок при их использование на Android, и как писать код таким образом. что корутины дали максимальную эффективность! Буду рад увидеть вас в зале 😁

    Скидка на билет по промокоду 10% AndroidBroadcastPromo
  • Android Broadcast

    #Rx #Updates

    RxJava 2.2.7 Update

    Вышла минорная версия RxJava в рамках которой произошел багфикс и улучшение doOnTerminate
  • Android Broadcast

    #Assembler #Hardcore

    Как мы писали Android-приложение на ассемблере

    Какой язык выбрать чтобы написать "Hello World!" на Android. Обычный программист напишет на Java, хипстер на Kotlin, но самые серьезные, сторонники подхода Чака Норриса выберут ассемблер. Автор статьи из суровых и решил повторить это за Чаком! Больше подробностей о том как это сделать вы найдете по ссылке.
  • Android Broadcast

    #AndroidStudio #Marble #ApplyChanges

    Android Studio Project Marble: Apply Changes

    Google наконец-то прислушалась к мольбам Android разработчиков о улучшение Android Studio в плане стабильности, фикса багов и чрезмерного потребления ресурсов. результат этого - Project Marble, в рамках которого на протяжение релизов Android Studio 3.4 и дальше будет происходить работы над стабилизацией.

    Первая статья в серии описывает падение Instant Run и замену его на Apply Changes, доступный в Android Studio 3.5. необходимость нового механизма возникла в том что Instant Run не справлялась со сложными приложениями.

    Отличия в Apply Changes следующие:
    👉 Минимальная поддерживаемая версия Android 8.0 Oreo
    👉 Apply Changes не модифицирует APK во время сборки, а опирается на механизмы в Android 8.0, которые позволяют переопределять классы "на лету"
    👉 Оптимизация механизма сравнения установленного и нового APK для вычисления разницы
  • Android Broadcast

    #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 будет повышаться до следующей мажорной версии ОС.

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

    #CodeQuality #Facebook #MachineLearning

    Facebook Infer is a static analysis tool base on machine learning

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

    Описание принципов работу Infer
    Попробуйте Infer онлайн
  • Android Broadcast

  • Android Broadcast

    #AndroidStudio

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

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

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

  • Android Broadcast

    #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
  • Android Broadcast

    #ProGuard #Kotlin #Coroutines

    -keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
    -keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
    -keepclassmembernames class kotlinx.** { volatile <fields>; }
  • Android Broadcast

    #GooglePlay #AndroidVitals

    Monitor and improve app performance with Android vitals

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

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

    В рамках видео также будет сделано демо Android Vitals
    Monitor and improve app performance with Android vitals

    In this recording of an App Hub Live session, the Google Play Console team discusses how factors such as stability, rendering, and battery consumption affect...

    YouTube