Разработка ждёт балета – Telegram
Разработка ждёт балета
1.65K subscribers
506 photos
4 videos
15 files
1.53K links
What I cannot create, I do not understand.

DM: @alexey_mileev
PeerLab: https://news.1rj.ru/str/+e2ND1tAa0lU2ZTli
Download Telegram
Выступление Chet Haase и Romain Guy. Тут ты должен был стать заинтригован.
В докладе описывается весь Android Rendering Pipeline, но поскольку вместить это в 40 минут не получится, доклад выглядит как быстрое набрасывание названий разных классов и модулей. Тем не менее, вдумчиво его посмотреть я бы скорее советовал.
Наброшу несколько названий из доклада, чтобы ты понимал, о чём речь: Choreographer, VSync, UI Thread, RenderThread, SurfaceFlinger, BufferQueue, Hardware Composer (HWC).
Теперь несколько интересных фактов из сессии:
1. Начиная с Android Oreo можно использовать Bitmap.Config.HARDWARE, чтобы аллоцировать Bitmap напрямую на GPU и не тратить время на копирование. Недостаток: если серьёзно разойтись, можно получить пачку совершенно невнятных крашей из глубин фреймворка
2. Кусочек хинта (почему так - см. видео) - чем меньше Window объектов на экране, тем лучше
3. Метод invalidate(left, top, right, bottom) можно больше не дрочить - система уже умеет неплохо оптимизировать этот момент, а багов от его использования уйма
4. “RecyclerView is now able to do prefetching of items ahead of time”
5. Graphika app on Github - пачка примеров с использованием SurfaceFlinger, Surface, SurfaceView, media encoder, virtual displays.
6. adb shell dumpsys SurfaceFlinger лучше выполнять, когда что-то анимируется/меняется на экране, иначе можно получить не совсем точные данные из-за дополнительных оптимизаций
Подробности обо всём этом найдёшь по ссылке.

#rendering #window #surface #gpu
https://youtu.be/zdQRIYOST64
В видео по ссылке рассказывают, что нового в ART в Android P:
1. Оптимизации компилятора для Kotlin (например, inline null-checks для non-null параметров)
2. CompactDex - штука, которая почикает Dex-файлы прямо на девайсе. Умеет: deduplicate and shrink code items, deduplicate multidex data, incorporate profile based Dex layout optimization (сложить методы, которые дёргаются часто или на старте в одно место в памяти)
3. На Nougat появились code profiles - во время выполнения аппа проверяется, какой код и когда выполняется и применяются соответствующие оптимизации. На Android P пошли дальше: появляется cloud profiles - данные о выполнении вашего кода загружаются в облако и оттуда прилетают другим юзерам. То есть если на Nougat чем чаще апп использовался, тем лучше работал, то на Android P ребята из Google хотят добиться оптимальной производительности сразу после установки, как раз благодаря cloud profiles. А теперь гениальная идея из их доклада: берём 1%-2% юзеров из alpha и beta каналов, они используют апп, а потом на всех юзеров уже раскатывается апп, для которого собраны все profiles и апп сразу работает оптимально. Любо!

#kotlin #art #performance #optimize
https://youtu.be/Yi9-BqUxsno
Доклад про то, что нового в Android development tools. Отмечу следующее:
- Android Studio 3.2:
* What’s new window
* App bundle generation
* Dynamic features support
* “Sessions” window in profiler
* Energy profiler
* AndroidX refactoring - перевести всё на новую версию support-библиотек. Ещё появился Jetifier: “converts legacy Maven artefacts to the new AndroidX namespace and caches those for new builds”
* Navigation library и UI для неё - позволяет выстроить всю навигацию одним xml, в том числе умеет добавлять анимации переходам, позволяет удобно прописать deeplinks и даже вроде бы позволяет разрулить передачу аргументов в Activity/Fragment
* Layout Editor - появляются всякие кнопки и меню для быстрого добавления sample data в design-режиме
* Запустили студию на Pixel Chromebook (no ADB yet - “you can upload straight to the Play Store and hope for the best”)
* D8 - new default Dexer & R8 - new default optimizer
* Бонус: показали фичу, которая в разработке (сказали, выйдет наверное даже не в 3.3) и использует следующую версию ConstraintLayout - работа с transition анимациями прямо из UI.
- Emulator:
* Save and replay snapshots
* Better camera to support AR apps
Ну, как-то так.

#studio #emulator #adt
https://youtu.be/WxAZk7A7OkM
Из этого выступления я выпишу не очень много поинтов, но доклад интересный, сходите посмотрите. А поинты там такие:
- Well Aged Advice:
* Prioritise efficiency
* Avoid WakeLocks
* Don’t use undocumented APIs
* Store strings and values as resources
* Avoid transmitting/storing contacts & location
- Android Fundamentals:
* Java language syntax -> Kotlin
* UI logic for background processing -> ViewModels
* Services for background processing -> Work Manager
* Monitor system events with Receivers -> Work Manager
* Content Providers for database access -> Room

Бонус: в Android P не будет вылезать ANR-диалог, апп просто будет падать.

#tips #anr
https://youtu.be/eHjHlujp3Tg
Что-то из нового Android:
- Battery:
* App standby buckets: использование аппа определяет, как и когда он запустить свои jobs
* Background restrictions: если апп ведёт себя непорядочно, можно ему к чёртовой матери всё запретить
- Background input & privacy:
* Микрофон в фоне - нельзя
* Камера в фоне - нельзя
* Разные сенсоры - вроде бы будут возвращать нулевые значения - можно сказать, тоже нельзя
- Background text measurement:
* Измерять текст дорого, а делать это приходится много. Прозвучала цифра: 80%-90% всего measure-layout-draw цикла приходится на измерение текста.
* Поэтому теперь его можно делать в фоне - PrecomputedText.create(…)
- Notifications:
* inline images & stickers
* можно показать картинки участников чата, например
* smart reply UI (а-ля чатбот)
* no more “app is using battery” notification
- Deprecation policy:
* Август 2018 - новые аппы только с targetSdk 26
* Ноябрь 2018 - обновления аппов только с targetSdk 26
* Август 2019 - те, кто используют нативные куски, обязаны давать 64-bit ABI (32-bit опционально)
Это только то, за что зацепился глаз. В докладе ещё больше, но тратить время не советовал бы :)

#androidp #background #notifications
https://youtu.be/eMHsnvhcf78
Доклад, в котором по шагам проходится, как работают штуки типа ProGuard и R8, как к ним пишутся keep-правила и что делать, когда после включения minifyEnabled true всё сломалось. В целом, не советую тратить время, если всё это уже знаешь.

#proguard #r8 #minification
https://youtu.be/x9T5EYE-QWQ
Нашёл шпаргалку (уверен, не я один постоянно это забываю) про `FontMetrics`. И да, как всегда Android Framework во всей красе - baseline считай сам :)
#cheatsheet #font #text
Статья-инструкция к решению задач на dynamic programming и memoization. Интересно, посмотрите.

#algorithm #dynamicprogramming #memoization
http://blog.refdash.com/dynamic-programming-tutorial-example/
Пачка хаков при работе с числами на уровне битов (сдвиги, включить-выключить битик и всё такое прочее). Статья классная, жалко только, что расписано всё в отрыве от применения. А ведь запекание состояния компонента (какого-нибудь View, например), которому нужна куча bool-флагов, в одно чиселко в определённых случаях может резко упростить и сократить код.

#hack #bit
http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/
Так, а если кто-то тут по битовым операциям хочет угореть, то @kenrube прислал ссылку на ещё более обширный сборник.

#hack #bit
http://graphics.stanford.edu/~seander/bithacks.html
Мы тут недавно вспомнили, что Google обещали выложить исходники Architecture Components, но как-то всё это дело прошло мимо нас и мы их не видели. Так вот, они всё-таки есть, может и вам пригодится.
- Lifecycle, LifecycleOwner, LifecycleObserver и прочее разное: https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle/common/src/main/java/android/arch/lifecycle
- ViewModel, LiveData и т.п.: https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle/extensions/src/main/java/android/arch/lifecycle
- Paging: https://android.googlesource.com/platform/frameworks/support/+/master/paging/common/src/main/java/android/arch/paging
- Room: https://android.googlesource.com/platform/frameworks/support/+/master/room/common/src/main/java/android/arch/persistence/room

#source #architecture #components
Доклад про новое в Android Support Library.
- RecyclerView Selection Library - штука, помогающая реализовать selection над списком. Умеет в selection жесты как в Google Photos, что очень даже неплохо. Хотя, это и не очень-то новость, вроде бы про неё я уже давно что-то слышал
- ListAdapter - какая-то странная поделка, упрощающая использование DiffUtil в меняющихся списках, но, судя по коду, который показали, она не то чтобы сильно сокращает код, который придётся написать + ограничивает ваш Adapter на один List, а этого не всегда достаточно
- androidx.webkit - позволяет использовать WebView, обновляемый через Play Store, на старых API
- CustomTab переезжает в androidx.browser + появляется возможность воткнуться в контекстное меню вашей CustomTab и добавить своё действие
- HeifWriter - позволяет эффективно записать YUV byte buffers, Surface и Bitmap в файл, но пока только на API 28+. Обещают добавить backport
- Material components:
* Обновили TextInputLayout - теперь он с рамкой и вроде бы умеет добавлять кнопку “Очистить”
* Button теперь можно по-разному закруглять и добавлять в них иконки
* BottomAppBar - по сути тот же AppBar, только снизу

#supportlib #view #material #talk
https://youtu.be/jdKUm8tGogw
Очень насыщенный доклад про рисование текста. Пока что из всех Google I/O докладов мне встретилось два настолько насыщенных доклада - этот и про Android rendering pipeline, о нём я писал выше.
Сразу порекомендую посмотреть это видео всем, кому приходится много использовать Span, особенно внутри RecyclerView.
Ну и основные highlights:
- Text stack в Android разбит на две части - Java и Native (сразу обратим внимание, что Android контролирует только три верхних уровня - всю Java часть и верхний уровень из Native - Minikin).
* Верхний уровень в Java части - это TextView и EditText, затем идут Layout, Paint и Canvas
* Native часть куда более насыщенная, пройдёмся сверху вниз: Minikin - библиотека для text measurement, line breaking и hyphenation (перенос слов), ICU - работа с Unicode, HarfBuzz - text shaping, FreeType - генерирует bitmaps для всех gliffs, Skia - основной графический движок системы
- Начиная с Android L у нас есть System Wide Word Layout LRU Cache - кэширует до 5000 слов, чтобы переиспользовать результаты обсчётов, когда это же слово снова нужно будет отрисовать
- В Android P ускорили использование simple break strategy вместе с normal или full hyphenation frequency - в детали углубляться не буду, подробности можно найти в видео
- Если с сервака, например, нам приходит строчка, в которой намешано несколько языков, и мы знаем, где какой язык используется, то для правильного переноса слов/строк текста нужно использовать LocaleSpan
- Span делятся на Paragraph spans (применяются на параграф, очевидно) и Character spans (применяются посимвольно, тоже очевидно). В свою очередь Character spans делятся на Appearance affecting (после применения нужно сделать redraw) и Metric affecting (после применения нужно сделать и remeasure, и redraw). Про написание своих Span в докладе тоже есть кусок, поэтому посмотрите, если нужно
- У нас есть три класса: SpannedString (нельзя mutable text, нельзя mutable markup), SpannableString (нельзя mutable text, можно mutable markup) и SpannableStringBuilder (можно mutable text, можно mutable markup). В докладе показали сравнение производительности SpannableString и SpannableStringBuilder (они по-разному устроены внутри: один на массиве, второй на деревьях), результаты следующие: до 250 Span они ведут себя одинаково, дальше SpannableStringBuilder выигрывает. Ну, вы поняли, что использовать :)
- Ещё я увидел интересную фишку с <annotaion/> тэгом внутри strings.xml. Допустим, у вас есть какая-то строка, переведённая на несколько языков. Вам нужно применить какой-то Span на определённое слово в этой строке. Но в одном языке это слово стоит в одном месте, а в другом языке - в другом. Вот ровно эту проблему решает <annotation/> тэг. Если такая задача перед вами стоит - сходите посмотрите.
- Если нужно отрисовать какой-то очень длинный текст, не нужно его целиком запихивать в TextView. Разбейте на параграфы и используйте RecyclerView.
- Ну и новая фишка в Android P - Magnifier. Это такая экранная лупа, которая поможет с выделением текста. Для TextView и EditText она будет работать из коробки, но и к своим custom View её можно прикрутить.
За сим откланиваюсь.

#text #span #textview #talk
https://youtu.be/x-FcOX6ErdI
Новость, которая будет интересна всем Google Developer Experts (GDE) и тем, кто планирует получить этот статус. Каждый GDE теперь может получить бесплатную лицензию на все продукты JetBrains.

#gde #google #intellij #jetbrains
https://www.jetbrains.com/shop/eform/devrecognition
Неплохая статья в блоге Karumi с некоторыми советами/фишками по Kotlin. Многое из того, что там есть, довольно очевидно и баян. Но есть и очень приятные вещи типа .exhaustive для when. Советую посмотреть.

#kotlin #tips
http://blog.karumi.com/kotlin-android-development-6-months-into-it/
@istima прислал ссылку на статью с перечислением Google приложений и сайтов, которые уже адаптировали обновленные Material Design гайдлайны. Посмотрите, если интересно.

#google #material #guidelines
https://9to5google.com/2018/05/22/full-list-google-apps-material-theme-design-2/
Слушайте, а доклады на какие темы вам бы больше хотелось видеть на конференциях? Даже если вы на них совсем не ходите, какие темы вызывают наибольший интерес? Давайте проведём мини-опрос.
Я не нашёл бота, который позволил бы делать множественный выбор и умел бы работать с таким кол-вом вариантов, но давайте хотя бы через Google форму. Там всего один вопрос, займёт меньше минуты :)
Через недельку подведём итоги.

#survey #conference
https://goo.gl/forms/Nfuwk8BNVZUwROV53
Разработка ждёт балета pinned «Слушайте, а доклады на какие темы вам бы больше хотелось видеть на конференциях? Даже если вы на них совсем не ходите, какие темы вызывают наибольший интерес? Давайте проведём мини-опрос. Я не нашёл бота, который позволил бы делать множественный выбор и умел…»
Как и обещал, подводим итоги опроса про интересующие вас темы. Спасибо всем, кто уделил минутку! Напомню, что можно было выбирать от 1 до 16 вариантов интересующих тем. Кстати, как меня потом пнул @pro100svitlo, я совсем забыл включить вариант про Б - Безопасность.

Итак, получилось вот что:
* Всего ответов: 127
* Минимально выбирали тем: 1
* Максимально выбирали тем: 16 (т.е. все)
* В среднем выбирали по 6.7 вариантов
* По медиане - выбирали 6

Теперь топ-5 тем:
* 11% - Архитектура - разные паттерны или примеры проектирования определённых слоёв приложения
* 11% - Внутренности View в Android, написание своих View и ViewGroup
* 10% - Интересное из области performance в Android
* 9% - Material Design с точки зрения разработчика - может какие-то интересные выработанные подходы
* 8% - Какие-то непосредственные кишки Android - интересная но не всегда практичная инфа

Полная табличка с результатами есть по ссылке.

#survey #results #conference
https://docs.google.com/spreadsheets/d/1u6v7EY1i9Rgmw8f_WIfAy7F9rPxw8T73wIyMgZfxkFU/edit?usp=sharing
Внезапно (не то чтобы очень, но всё же) Google убрали раздел Tablet с android-dot-com. Пациент и раньше был скорее мёртв, чем жив, так что я радуюсь. А за новость скажем спасибо @istima.

#tablet #chromeos #google
https://techcrunch.com/2018/06/01/google-quits-selling-tablets/