LiveData

不管LiveData是与组件的生命周期相关联,还是其采用观察者模式检测数值的变化,它有什么吸引力让我们使用它呢?

  • 避免内存泄漏: 由于Observers绑定本身的Lifecycle对象, 当Lifecycle被销毁时, 其自动被移除。
  • Activity处于onstop状态时, 不会导致应用程序意外崩溃:
    当观察者的的生命周期处于非活动状态(比如Activity处于后台堆栈)时, Observer不会接到数据的变化 收到更改事件
  • 始终保持最新的数据: 当Lifecycle再次回到可活动状态时(比如Activity从后台堆栈返回到前台), 它会受到最新的更改信息
  • 适当的配置更改: 如果由于配置更改(比如设置旋转)重新创建Activity/Fragment时, 会立即接收到最有可用的数据。
  • 共享资源: 可用保留一个有用的实例, 分享给多个Activity或者Fragment
  • 没有针对生命周期做出多余的针对处理: 一切生命周期的变化, 所造成的的处理事务, 由LiveData自动管理。

在LiveData中,有4个重要的方法:

  1. onActive(): 当LiveData有可观察的对象时回调
  2. onInactive(): 当LiveData没有可观察的对象时回调
  3. setValue(): 当LiveData更新实例的值时调用, 并通知Observer数据的更改,只能在主线程
  4. postValue(): 当LiveData更新实例的值时调用, 并通知Observer数据的更改,可以在任意线程

使用

两种使用方式:
1.使用LiveData对象
2.继承LiveData类

使用LiveData对象

使用LiveData对象主要有以下几个步骤:

1.创建保存特定数据类型的LiveData实例;

2.创建Observer对象,作为参数传入LiveData.observe()方法添加观察者;

3.更新Livedata对象存储的数据;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final MutableLiveData liveData = new MutableLiveData<>();
        final TextView textView = findViewById(R.id.text);
        Button button = findViewById(R.id.change);
        liveData.observe(this, new Observer() {
            @Override
            public void onChanged(@Nullable String s) {
                textView.setText(s);
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                liveData.postValue("6");
            }
        });

    }
}

你可能感兴趣的:(LiveData)