在真正接觸並使用MVVM架構的時候,整我的都很差了。由於我的以爲,MVVM相對於MVC、MVP學習難度比較大,設計的知識點不是一點半點。因此想慢慢記錄下本身的成長。若有錯誤但願指正。java
從零開始搭建MVVM架構系列文章(持續更新):
Android從零開始搭建MVVM架構(1)————DataBinding
Android從零開始搭建MVVM架構(2)————ViewModel
Android從零開始搭建MVVM架構(3)————LiveData
Android從零開始搭建MVVM架構(4)————Room(從入門到進階)
Android從零開始搭建MVVM架構(5)————Lifecycles
Android從零開始搭建MVVM架構(6)————使用玩Android API帶你搭建MVVM框架(初級篇)
Android從零開始搭建MVVM架構(7) ———— 使用玩Android API帶你搭建MVVM框架(終極篇)git
仍是那張圖AAC(Android Architecture Components)github
這篇咱們講Lifecycles,讓咱們瞭解和認識Lifecycles後,最終運用到咱們的MVVM的項目中去。本文是本身的總結,若有錯誤,請指正架構
介紹:能感知生命週期的組件
做用:監測Activity/Fragment等生命週期組件在生命週期變化時,能及時通知其餘組件框架
其中包括了LifecycleOwner、LifecycleObserver。咱們能夠這麼理解,實現了LifecycleOwner就是被觀察者,咱們能夠看源碼(Returns the Lifecycle of the provider,生命週期的提供方,那麼久能夠認爲是被觀察),而LifecycleObserver能夠是觀察者。ide
想一想,若是咱們沒有LiveData組件,可是還要實現:Activity的生命週期處於onStart與onResume時,LiveData處於活動狀態,纔會把更新的數據通知至對應的Activity ,若是生命週期處於onStop或者onPause時,不回調數據更新,直至生命週期爲onResume時,當即回調。沒有LiveData咱們就要在代碼裏和Activity裏寫一堆判斷去實現這個功能,而如今Lifecycles已經幫咱們實現了這個功能了,咱們只管用。來看看咱們以前說的LiveData,LiveData監聽改變的代碼:post
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this這裏的類型就是LifecycleOwner,
liveData.observe(this, new Observer<String>() {
//這裏就就是一旦被觀察者LifecycleOwner的生命週期改變,就會通知觀察者liveData調用onChanged。
@Override
public void onChanged(String s) {
}
});
}
複製代碼
爲何這裏能直接用this呢? 以前也解釋過了,在26版本之後的Support庫中,AppCompatActivity和SupportActivity中都實現了LifecycleOwner,內部已經對UI界面的生命週期作了處理了。咱們能夠直接代碼點進去,以下學習
這裏若是還不清晰的話,咱們來本身實現LifecycleOwner、LifecycleObserver(要知道google的組件,內部已是幫咱們處理好的)this
Activity以下:google
public class LifecyclesActivity extends Activity implements LifecycleOwner {
private MutableLiveData<String> liveData = new MutableLiveData<>();
private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycles);
liveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
LogUtils.i("觀察LiveData", " ==> " + s);
}
});
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
super.onSaveInstanceState(outState);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
@Override
protected void onStop() {
super.onStop();
liveData.postValue("運行試試");
}
}
複製代碼
運行後看打印,按home鍵退出去,而後點擊回來。一樣出現了咱們以前LiveData的效果同樣:離開界面的時候不會打印,當返回界面的時候當即打印。
咱們本身新建一個MyObserver,監聽全部生命週期
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
LogUtils.i("MyObserver","onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
LogUtils.i("MyObserver","onStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
LogUtils.i("MyObserver","onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
LogUtils.i("MyObserver","onPause");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
LogUtils.i("MyObserver","onStop");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestory() {
LogUtils.i("MyObserver","onDestory");
}
// @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
// public void onAny() {
// LogUtils.i("MyObserver","onAny");
// }
}
複製代碼
而後Activtiy裏,加上
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycles);
getLifecycle().addObserver(new MyObserver());
}
複製代碼
運行後,看打印,這裏我就不貼效果了。當咱們在項目裏用到Lifecycles時,以上這些都不用咱們考慮。我這裏只是簡單告訴你們,lifecycles究竟是怎麼個意思。google已經把咱們要處理的都封裝在這些組件裏。