Facebook開源了Litho。Litho是一種創建安卓應用用戶圖形界面的框架,使用了類似于React的聲明式風格,考慮了界面的滾動性能。
使用Facebook Litho,開發人員可以調用聲明式API創建不可變的UI組件。由于組件是不可變的,因此可以另開一個用于準備渲染和布局的線程,然后將組件傳遞給UI線程,實現在屏幕上的實際渲染。Litho使用了代碼生成和針對渲染的組件優化,通過對組件分組降低了安卓ViewGroups的數量,使用更少視圖層級生成更為平面化的界面。據Facebook宣稱,這些做法降低了內存的使用,增加了界面的滾動速度。
Litho使用Yoga布局組件,該過程可以同步完成,也可以異步完成。Yoga是一個跨平臺的布局引擎,它也是由Facebook開源發布的。考慮到組件是不可變的,而創建大量組件的代價很大,因此Litho允許一個組件被當前視圖棄用后,可在其它視圖中重用。
使用Litho定義一個“Hello, World!”文本組件的代碼如下:
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); }}LithoView相當于安卓的ViewGroup,實現Litho定義組件與安卓View間的關聯。Text是一個Litho提供的小部件,具有text、textColor、textSize、textStyle等一系列屬性。
Litho API相當龐大,其中包含多個軟件包,具有超過300個Java類和接口。Litho支持用戶化布局、單元測試、事件處理、RTL(right-to-left)文本、可訪問性等多種功能。
Litho已用于多個Facebook的安卓應用,例如Facebook、Facebook Lite、Messenger和Workplace等。Facebook聲稱在界面滾動功能上,Litho比安卓RecyclerView的性能提高了35%。這是通過“將繁重工作轉移到后臺線程,并將渲染工作分布在多個幀中”實現的。此外:
Litho將復雜視圖分解為多個較小部分,例如文本、圖像和視頻等,然后增量地渲染各部分,并將需完成的工作分布到多個幀中。它還能在回收利用各個小部分,以無限可能的方式重組它們,這降低了在內存中需要創建并存儲的視圖個數。