1. 程式人生 > >Android Jetpack - LiveData 介紹

Android Jetpack - LiveData 介紹

Jetpack.jpg

1.前言

  • 2018年穀歌I/O 釋出了一系列輔助android開發者的實用工具,合稱 Jetpack ,以幫助開發者構建出色的 Android 應用。
  • Jetpack 包含4個部分的元件:Architecture、Foundation、Behavior 以及 UI
  • 今天為大家介紹的是 ArchitectureLiveData
  • 文章中例項  linhaojian的Github

2.簡介

  • 介紹 :
    LiveData是一個有生命週期感知 & 可觀察的資料持有者類。
  • 作用:
    1.持久化的觀察資料的更改與變化 & 及時通知UI更新。
  • 特點:
    1.感知對應Activity的生命週期,只有生命週期處於onStart與onResume時,LiveData處於活動狀態,才會把更新的資料通知至對應的Activity。
    2.當生命週期處於onStop或者onPause時,不回撥資料更新,直至到生命週期為onResume時,立即回撥。
    3.當生命週期處於onDestory時,觀察者會自動刪除,防止記憶體溢位。
    4.共享資源。您可以使用單例模式擴充套件LiveData物件以包裝系統服務,以便可以在應用程式中共享它們。  LiveData物件連線到系統服務一次,然後任何需要該資源的觀察者都可以只觀看LiveData物件。

3.原理

  • 執行流程
    LiveData原理.png
  • 類分析
      * Observer                                         :  觀察者,負責監聽資料變化 & 回撥。
      * **LifecycleOwner **                              :  感知Activity生命週期的類。
      * LifecycleBoundObserver
                    :  負責關聯Observer與LifecycleOwner。
      * SafeIterableMap                             :  以<Observer,LifecycleBoundObserver>的格式儲存多個觀察者。

4.基本使用

4.1 MutableLiveData 初始化

LiveData是一個抽象類,所以在使用時,我們需要使用它的實現類 MutableLiveData

public class AViewModel extends ViewModel {
    private MutableLiveData<User> userLiveData = new MutableLiveData<User>();
 }
#### 4.2 Observer註冊 
```java
public class ActivityA extends AppCompatActivity {
      //...
     ViewModelProviders.of(this).get(AViewModel.class)
                .getUser().observe(this, new Observer<User>() {
            @Override
            public void onChanged(@Nullable User user) {
                  //獲取資料變化
            }
        });
}

4.3 資料變化觸發

  • 同步:接收端資料回撥與傳送端同一個執行緒。
     userLiveData.setValue(user);
  • 非同步:接收端在主執行緒回撥資料。
     userLiveData.postValue(user);

5.總結

  • 到此,LiveData就介紹完成了。後續我會進行分享Jetpack更多其他內容。
  • 如果喜歡我的分享,可以點選  關注  或者  ,你們支援是我分享的最大動力 。
    linhaojian的Github

歡迎關注linhaojian_CSDN部落格或者linhaojian_簡書

不定期分享關於安卓開發的乾貨。


寫技術文章初心

  • 技術知識積累
  • 技術知識鞏固
  • 技術知識分享
  • 技術知識交流