litho

持续更新中。。。。

简单介绍
  • litho是一个用于在Android上构建高效用户界面的声明性框架,它允许你通过基于Java注释的简单功能API编写高度优化的Android视图(能够有效地减少过度绘制)。它主要用于实现基于RecyclerView的复杂可滚动UI。

  • 使用Litho,你可以根据组件构建UI,而不是直接与传统的Android视图交互,在视图中体现为每一小块均为component,litho用View去承载Component,最终这个Component会被绘制在View上。

Sections
  • Litho主要是一个渲染API,但是高效的渲染UI只是编写高性能界面所面临挑战的一部分,如果你仔细查看你的设备,它们中的很多都是围绕一个可滚动的界面,这个界面可以获取并展示数据。使用RecyclerView构建列表时,必须考虑如何使适配器与数据保持同步,并通知适配器任何更改。这通常需要大量的手动索引处理,并且会产生有状态的,强制性的代码,当产品增长时将难以维护。

  • Section构建在Litho之上,为编写高度优化的列表界面提供声明性和可组合的API,虽然Litho Components用于显示UI,但Sections是一种构造数据并将其转换为Litho组件的方法。

image.png
事件处理

litho component之间的通信是通过OnEvent来实现的,事件声明为带有@Event注解的POJO类。按照惯例我们使用以Event为后缀的类名,events并不是在LayoutSpec或者在MountSpec中声明的内部类,这是设计规范,并且events可以在多个Component之间进行通信。

@Event
public class ColorChangedEvent {
      public int color;
}  

在这个例子中,我们假定有个ColorComponent的Component,为了表明ColorComponent能够分发ColorChangedEvent事件,ColorComponentSpec必须用该信息进行注解,这是通过@MountSpec和@LayoutSpec注释的events参数完成的。一个Component可以通过注解声明来表示它可以发送多个events.

@LayoutSpec(events = { ColorChangedEvent.class })
class ColorComponentSpec {
  ...
  @OnCreateLayout
  static Component onCreateLayout(
      Context c,
      @Prop int color) {
    ...
    EventHandler handler = ColorComponent.getColorChangedEventHandler(c);
    if (handler != null) {
      ColorComponent.dispatchColorChangedEvent(
          colorChangedHandler,
          color);
    }
    ...
  }
}

你可能感兴趣的:(litho)