非死book Litho:高性能安卓UI的构建框架
460757952
7年前
<p>非死book开源了 Litho 。Litho是一种创建安卓应用用户图形界面的框架,使用了类似于React的声明式风格,考虑了界面的滚动性能。</p> <p>使用 非死book Litho ,开发人员可以调用声明式API创建不可变的UI组件。由于组件是不可变的,因此可以另开一个用于准备渲染和布局的线程,然后将组件传递给UI线程,实现在屏幕上的实际渲染。Litho使用了代码生成和针对渲染的组件优化,通过对组件分组降低了安卓ViewGroups的数量,使用更少视图层级生成更为平面化的界面。据非死book宣称,这些做法降低了内存的使用,增加了界面的滚动速度。</p> <p>Litho使用 Yoga 布局组件,该过程可以同步完成,也可以异步完成。Yoga是一个跨平台的布局引擎,它也是由非死book开源发布的。考虑到组件是不可变的,而创建大量组件的代价很大,因此Litho允许一个组件被当前视图弃用后,可在其它视图中重用。</p> <p>使用Litho定义一个“Hello, World!”文本组件的代码如下:</p> <pre> <code class="language-java">public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ComponentContext c = new ComponentContext(this); final LithoView lithoView = LithoView.create( this /* 上下文 */, Text.create(c) .text("Hello, World!") .textSizeDip(50) .build()); setContentView(lithoView); } }</code></pre> <p>LithoView相当于安卓的ViewGroup,实现Litho定义组件与安卓View间的关联。Text是一个Litho提供的小部件,具有text、textColor、textSize、textStyle等一系列属性。</p> <p>Litho API 相当庞大,其中包含多个软件包,具有超过300个Java类和接口。Litho支持用户化布局、单元测试、事件处理、RTL(right-to-left)文本、可访问性等多种功能。</p> <p>Litho已用于多个非死book的安卓应用,例如非死book、非死book Lite、Messenger和Workplace等。 非死book声称在界面滚动功能上,Litho比 安卓 RecyclerView 的性能提高了35%。这是通过“将繁重工作转移到后台线程,并将渲染工作分布在多个帧中”实现的。此外:</p> <p>Litho将复杂视图分解为多个较小部分,例如文本、图像和视频等,然后增量地渲染各部分,并将需完成的工作分布到多个帧中。它还能在回收利用各个小部分,以无限可能的方式重组它们,这降低了在内存中需要创建并存储的视图个数。</p> <p> </p> <p> </p> <p>项目主页:<a href="http://www.open-open.com/lib/view/home/1493348109684">http://www.open-open.com/lib/view/home/1493348109684</a></p> <p> </p>