2.10 Jetpack LiveData部分

 

LiveData是一个可观察的数据持有者类,但和其他的可观察对象不同,它与生命周期相关联,比如Activity的生命周期。LiveData能确保仅在Activity处于活动状态下才会更新。也就是说当观察者处于活动状态,才会去通知数据更新。
个人认为这是避免内存泄漏一个很实用的操作。
官方说明LiveData的优点

    • 确保UI与数据同步
    • 不会产生内存泄漏
    • 不会因为Activity停止而Crash
    • 不需要手动控制生命周期
 1 package com.example.livedatatest;
 2 
 3 import androidx.lifecycle.MutableLiveData;
 4 import androidx.lifecycle.ViewModel;
 5 
 6 public class ViewModelWithLiveData extends ViewModel {
 7     private static MutableLiveData<Integer> LikedNumber;
 8 
 9    /* ViewModelWithLiveData(){   //避免数据为空
10         LikedNumber =new MutableLiveData<>();
11         LikedNumber.setValue(0);
12     }*/
13 
14 
15     public MutableLiveData<Integer> getLikedNumber() {
16         if(LikedNumber == null){  //避免数据为空
17             LikedNumber =new MutableLiveData<>();
18             LikedNumber.setValue(0);
19         }
20         return LikedNumber;
21     }
22 
23 
24      static public void addLinkedNumber(int n){  //+n 或者 -n
25         LikedNumber.setValue(LikedNumber.getValue()+n);
26     }
27 }

 

 实现代码

 1 package com.example.livedatatest;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 import androidx.lifecycle.Observer;
 5 import androidx.lifecycle.ViewModelProvider;
 6 import androidx.lifecycle.ViewModelProviders;
 7 
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.widget.ImageButton;
11 import android.widget.TextView;
12 
13 public class MainActivity extends AppCompatActivity {
14     ViewModelWithLiveData viewModelWithLiveData;
15     TextView textView;
16     ImageButton button1,button2;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         textView = findViewById(R.id.textView);
23         button1 = findViewById(R.id.imageButton);
24         button2 = findViewById(R.id.imageButton2);
25 
26        viewModelWithLiveData =  ViewModelProviders.of(this).get(ViewModelWithLiveData.class);
27        //为变量添加一个观察 观察自我 若发生变化 则呼叫下面函数 函数执行
28        viewModelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
29             @Override
30             public void onChanged(Integer integer) {
31                 textView.setText(String.valueOf(integer));
32             }
33         });
34 
35        button1.setOnClickListener(new View.OnClickListener() {
36            @Override
37            public void onClick(View v) {
38                ViewModelWithLiveData.addLinkedNumber(1);
39            }
40        });
41 
42         button2.setOnClickListener(new View.OnClickListener() {
43             @Override
44             public void onClick(View v) {
45                 ViewModelWithLiveData.addLinkedNumber(-1);
46             }
47         });
48     }
49 }

 

posted @ 2020-02-10 17:00  不懂就要问!  阅读(148)  评论(0编辑  收藏  举报