Конференция Facebook F8 часто кажется больше местом для объявления своих будущих направлений, чем чем-либо, имеющим непосредственное отношение к разработчикам, но Litho должен заинтересовать любого программиста Android.
У Facebook есть ряд важных приложений для Android, и у него есть ресурсы для инвестирования в базовую инфраструктуру. В прошлом году компания объявила о создании новой платформы пользовательского интерфейса Android. Теперь это было выпущено как Litho с открытым исходным кодом.
Основная причина его внедрения — повышение эффективности прокрутки интерфейсов:
Мы начали использовать эту структуру на многих поверхностях в наших приложениях для Android, включая Facebook, Messenger, Facebook Lite и Workplace, и заметили улучшение производительности прокрутки до 35 процентов.
Он описывается как «декларативный», но не в обычном смысле этого слова. Вместо этого компоненты пользовательского интерфейса создаются с использованием вызовов методов в свободном стиле. Например:
final Component component = Text.create (контекст)
.text («Привет, мир»)
.textSizeDip (50)
.строить();
Результирующие объекты являются окончательными и, следовательно, неизменяемыми, поэтому их можно безопасно передавать между потоками.
«Litho разработан, чтобы работать быстрее и эффективнее при работе с прокручиваемыми поверхностями. Он направлен на повышение производительности за счет переноса тяжелой работы в фоновый поток и распределения работы по визуализации по нескольким кадрам.
Используя декларативную модель React и систему компоновки Yoga, Litho может отделить операции компоновки от представлений Android. Это позволяет нам перенести операции измерения и компоновки, требующие интенсивного использования ЦП, в фоновый поток, экономя миллисекунды «.
Вторую претензию пресс-релиза понять сложнее:
Наконец, Litho разбивает сложные представления на более мелкие части, такие как текст, изображения и видео, и визуализирует их постепенно, распределяя работу, которую необходимо выполнить, на несколько кадров. Он также перерабатывает эти более мелкие части и может рекомбинировать их практически бесконечным числом способов, уменьшая общее количество представлений, которые необходимо создать и сохранить в памяти.
Это говорит о том, что Litho использует стандартные объекты View и позволяет системе Android выполнять рендеринг. Кажется, что он организует эти компоненты представления нижнего уровня в макет пользовательского интерфейса.
Readme репозитория GitHub делает более простые утверждения:
Декларативный: Litho использует декларативный API для определения компонентов пользовательского интерфейса. Вы просто описываете макет своего пользовательского интерфейса на основе набора неизменяемых входных данных, а фреймворк позаботится обо всем остальном.
Асинхронный макет: Litho может заранее измерить и разметить ваш пользовательский интерфейс, не блокируя поток пользовательского интерфейса.
Сглаживание представлений: Litho использует Yoga для макета и автоматически уменьшает количество ViewGroups, содержащихся в вашем пользовательском интерфейсе.
Детализированная переработка: любой компонент, такой как текст или изображение, можно переработать и повторно использовать в любом месте пользовательского интерфейса.
Использовать Litho довольно просто, и вы можете использовать его вместе с Android Studio, но, конечно, вы не можете использовать конструктор для перетаскивания макета, и вы можете забыть все, что вы знаете о макетах XML, потому что использование Litho является весь код. Вы также не сможете воспользоваться преимуществами последнего контейнера макетов Google, ConstraintLayout, но это может быть неплохо. Иногда проще — лучше.
Вот пример helloworld из readme на GitHub:
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
финальный контекст ComponentContext =
новый ComponentContext (это);
последний компонент компонента =
Text.create (контекст)
.text («Привет, мир»)
.textSizeDip (50)
.строить();
setContentView (LithoView.create (контекст,
компонент));
}
Трудно сказать, завоюет ли Litho популярность. Даже повышение эффективности на 35% может не окупиться, если вам придется отказаться от стандартного подхода Android и верить, что Facebook продолжит поддерживать проект.