Привет! Меня зовут Михаил Баранников, я — Android-разработчик в e-Legion. Недавно вернулся с Google I/O и решил поделиться впечатлениями и ссылками на интересные выступления. Всего на конференции было 14 параллельных треков, а значит — огромное количество докладов. Статья полезна для тех, кто планирует посмотреть видеозаписи докладов по Android-разработке, но не знает, с чего начать.
Программа
Каждый участник Google I/O сразу выбирает события, на которые хочет сходить. Они делятся на несколько типов:
- Доклады — узнать о том, что нового появилось, как это использовать.
- Sandbox demo — демонстрации Daydream и Tango.
- Office hours — возможность задать свои вопросы докладчикам для решения своих насущных проблем.
- App review — посоветоваться на тему вашего приложения (как разрабатывать, как развиваться, куда расти).
- Codelabs — опробовать всё представленное в деле.
Доклады делятся на несколько тем: Android, Firebase, облачные технологии, реклама в приложениях, Google Play, ассистента, дизайн, mobile web, machine learning & AI и другие. Выбрать доклады по категориям легко: занимаетесь разработкой мобильных веб-приложений или вам интересны такие вещи как Flutter и React Native — идёте на mobile web, если интересуетесь искусственным интеллектом и machine learning — на события, связанные с ними.
Я выставил в приложении Google I/O фильтр на Android и выбрал интересующие меня доклады из представленного списка, добавив их в “My I/O”.
Больше всего мне были интересны доклады про архитектуру и оптимизацию приложений. Идеальной архитектуры нет, поэтому хотелось посмотреть, что предложат ребята из Google. И они предложили: попытались решить проблемы, от которых все уже давно устали. А именно: привязка к жизненному циклу, сохранение запросов/данных при поворотах, приятная работа с базой данных. Также рассказали, как уменьшить размер apk и ускорить gradle сборку. К сожалению, даже присутствуя на I/O не удаётся посмотреть вживую все интересные доклады, ведь некоторые идут параллельно.
Ниже расскажу подробнее о некоторых интересных докладах.
Жизненный цикл и повороты
Были добавлены Lifecycle, LifecycleActivity, LifecycleFragment, LifecycleOwner, LifecycleObservable, LiveData.
Используя вышеперечисленное, разработчик сможет привязаться в жизненному циклу активити, фрагмента или всего приложения. Для этого нужно реализовать интерфейс LifecycleObservable. Не сильно вдаваясь в подробности: имея объект Lifecycle вы сможете проверять, в каком состоянии сейчас находится жизненный цикл, или подписываться на определённые события жизненного цикла с помощью аннотаций. Это позволит писать компоненты, которые работают в соответствии с жизненным циклом, и избавиться от кучи кода в onResume/onPause.
LiveData представляет из себя Observable, который знает и работает в соответствии с жизненным циклом. Это очень полезно, если вы хотите начать загрузку данных при появлении подписчиков или прекратить загрузку, если подписчиков нет. После окончания загрузки вызываем setValue(), и все подписчики получают эти данные.
Но мы также хотим сохранять запросы и данные при поворотах. Для этого нам предлагают использовать ViewModel. В ней мы можем хранить наши LiveData. ViewModel не уничтожается при поворотах экрана. Получить ViewModel мы можем с помощью ViewModelProviders.of(FragmentActivity).get(MyViewModel.class). Если ViewModel не создана, то создаётся новая, если уже создана — нам вернут старую. Так как внутри ViewModel — LiveData, остальной код остаётся таким же. Мы получаем LiveData и подписываемся на них. Важно отметить, что при подписке на LiveData, если там уже есть данные, нам их тут же вернут. По сути она работает как всем известный BehaviorSubject из RxJava, но при этом в рамках жизненного цикла.
Смотреть с 1:00. В этом видео более подробно описываются Lifecycle, LiveData и ViewModel.
База данных
Был представлен Room. Он должен спасти нас от boilerplate кода, работать с SQLite и предоставлять compile-time verification. Room с помощью аннотаций позволяет работать с базой данных. К сожалению, придётся писать SQLite запросы руками. Но зато вся мощь SQLite к нашим услугам. При работе с Room нужно будет создать классы данных Entity, Dao-интерфейс и Database-класс. Нам также доступны некоторые shortcut аннотации, чтобы не писать руками уж совсем простые SQL запросы: Insert, Delete, Update. Room может возвращать LiveData, что даёт нам возможность подписываться на обновления БД без лоадеров. Как же давно мы этого ждали. Ну и последний штрих — Room поддерживает не только LiveData, но и RxJava 2 Flowable.
Смотреть со второй минуты. Тут подробнее о новом подходе при работе с базами данных. Дополнительно рассказали про миграции.
Если совсем мало времени, но про архитектуру посмотреть хочется, то можно воспользоваться видео на YouTube, начинать смотреть с 6:30. Сама архитектура объяснена начиная с 28:20. В данном видео представлен краткий обзор архитектурных компонентов.
Приятно, что нас слышат и предлагают инструменты для решения проблем. Сейчас уже появилось множество тестовых проектов, использующих данную архитектуру. Представленные инструменты внушают надежду. Удалось ли им решить поставленные задачи и существующие проблемы — покажет время. Также стоит отметить, что это не идеальная архитектура и всем стоит использовать только её. Было сказано, что если у вас есть ваша архитектура и она хорошо работает, то вы можете смело её оставить.Если вы начинаете новый проект, то можете попробовать данный подход.
Мой личный ТОП докладов помимо архитектуры
Best Practices to Slim Down Your App Size
Как уменьшить размер apk файла, что приводит к меньшему количеству отмен загрузок. Как уменьшить количество места, занимаемого ресурсами и классами. Полезно в продуктовой разработке.
Speeding Up Your Android Gradle Builds
Как в 10 шагов ускорить сборку. Смотреть стоит первую половину до 22-й минуты. Либо смотреть сразу 22 минуту, где есть список всех оптимизаций. Одной из оптимизаций является использование Instant Run. Последний раз я пытался использовать его год назад и тут же «навсегда» выключил. В видео говорится, что они исправили множество багов, связанных с работой Instant Run. Что ж, возможно стоит дать ему второй шанс.
Fragment Tricks
Немного работы с фрагментами. В целом, ничего нового рассказано не было. Просто показано, как надо работать с фрагментами, и рассказано о setReorderingAllowed(). Смотреть с 7-й минуты.
Best Practices to Improve Sign-In, Payments, and Forms in Your Apps
Автозаполнение форм в Android O и перенос данных приложения между телефонами при помощи Account Transafer API. Если второе полезно, то первое пока актуально только для Android O (ждём появления в support library). Объяснение системы — с 4:45, пример использования — с 7:50. Перенос данных начинается с 13-й минуты.
Android Performance: An Overview
Подробный рассказ о Systrace и его использовании. Полезно разработчикам, которые хотят сделать приложение максимально быстрым. С помощью Systrace можно найти узкие места в приложении для оптимизации, но это потребует довольно большого количества времени.
Итог
Общие впечатления от конференции положительные. Порадовала организация, сами выступления и возможность пообщаться, задать вопросы и получить на них ответы. Немного огорчило, что нет огромного нововведения в Android O. На данный момент это небольшие изменения, направленные на более удобную работу как пользователя, так и разработчика.
В планах пересмотреть ещё раз видео с конференции. Интересные на мой взгляд доклады можно найти здесь.
Автор: Arutar