android新架构,Android新架构组件 LifeCycles 简介
一、前言
為了使開發(fā)者能盡快在 Android 平臺上開發(fā)出高質(zhì)量的項目,Android 官方推出了 Android Jetpack 項目,旨在從基礎(chǔ),架構(gòu),行為以及界面 4 大方面體系化地為我們提供組件級別的支持。當然,在實際開發(fā)過程中,我們的舊項目甚至是新項目都不可能完全采用其全部的解決方案。一般來說我們都是各取所需,汲長補短。
我最關(guān)注的是其所提供的架構(gòu)方面的組件, 這一套架構(gòu)的核心組件Lifecycles、LiveData、ViewModel、Room也被稱之為 AAC。通過 AAC + DataBinding+ MVVM 所打造的應(yīng)用的基礎(chǔ)架構(gòu),就目前的實踐來看,是特別簡潔且高效的。對于中小型項目來說,是優(yōu)秀的可選方案之一。而今天我們要了解的就是 Lifecycles 組件。
二、Lifecyces 基礎(chǔ)
Lifecyces 根據(jù)官方的解釋,是一個生命可感知的組件。如下是官方關(guān)于 Lifecycels 的一張功能說明圖。
Lifecycels
從圖上來看,其主要包括了狀態(tài)(states)以及事件(events)兩個概念,且狀態(tài)與事件也是一一對應(yīng)的。
不過,現(xiàn)在看這張圖肯定是有一點懵逼的。我們需要通過分解一下官方的 demo 來直觀感受一下 Lifecycles 的用法。其過程如下:
1. 實現(xiàn)LifecycleObserver
首先我們需要實現(xiàn)一個 LifecycleObserver,你可以把它等同于觀察者模式中的 Observer。在這里,它就是事件的接受收器。而對于每一個不同的事件,則通過在實現(xiàn)類的方法中添加相應(yīng)的 @OnLifecycleEvent(Lifecycle.Event.xxx) 注解來實現(xiàn)的。具體代碼如下所示。
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
}
}
2. 實現(xiàn) LifecycleOwner
其次就是要實現(xiàn)一個 LifecycleOwner,一般來說就是 Activity 或者 Fragment 來實現(xiàn)是比較合適的。當然,不是這 2 者中的一個,也是可以的,只要你愿意。
public class MyActivity extends Activity implements LifecycleOwner {
@NonNull
@Override
public Lifecycle getLifecycle() {
return null;
}
}
3. 向 LifecycleOwner 注冊 LifecycleObserver,建立起兩者之間的連接
有了接收事件的觀察者/接收者,也有了發(fā)送事件的生命周期擁有者/發(fā)送者,其不可能平白無故的就建立起連接的。因此,我們需要一個連接者——LifecycleRegistry。一般來說,我們在實現(xiàn)了 LifecycleOwner 的 Activity 中聲明它的變量,并在 onCreate() 方法中實例化。然后再通過變量向其添加 LifecycleObserver。如下代碼所示。
public class MyActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
getLifecycle().addObserver(new MyObserver());
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
4. mark 狀態(tài),"發(fā)送"事件
接下來,我們需要在其生命周期的方法里,mark 出生命周期的狀態(tài)以使得其可以產(chǎn)生一個對應(yīng)的事件發(fā)送到 LifecycleObserver 相應(yīng)的方法上。如下代碼所示。
public class MyActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
......
......
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
通過以上 4 個步驟后,以后再也不用逐個逐個在生周期里面去調(diào)用相應(yīng)的 Listener 或者 Controller 了。
三、原理簡析
Lifecycels 工作原理圖
從原理圖上看,以 LifecycleRegistry 為中心,其擁有一個 LifecycleOwner 實例和多個 LifecycleObserver 實例。由 LifecycleOwner 通過 LifecycleRegistry 來 markState ,然后又由其來 dispatch 各個 Event 到所有 LifecycleOwner 的相應(yīng)事件的方法中。
四、后記
關(guān)于 Lifecycles 組件就講這么多,暫時也不打算涉及到其源碼的分析。
最后,感謝你能讀到并讀完此文章。受限于作者水平有限,如果存在錯誤或者疑問都歡迎留言討論。如果我的分享能夠幫助到你,也請記得幫忙點個贊吧,鼓勵我繼續(xù)寫下去,謝謝。
總結(jié)
以上是生活随笔為你收集整理的android新架构,Android新架构组件 LifeCycles 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu: 软件库(software
- 下一篇: MSSQL 重建索引(在线重建、控制最大