Android 为什么我们需要LiveData和ViewModel

Android 为什么我们需要LiveData和ViewModel,android,android-livedata,mutablelivedata,Android,Android Livedata,Mutablelivedata,我使用了LiveData和ViewModel示例 但是我不理解这个特性的用途,因为我可以不使用这个特性直接更改值,即使通过使用观察代码,代码中的行数正在增加,通过创建MutableLiveData,这与ViewModel中的相同 下图ViewModelcode 公共类FirstViewModel扩展了ViewModel{ // Create a LiveData with a String public MutableLiveData<String> mCurrent

我使用了
LiveData和ViewModel
示例 但是我不理解这个特性的用途,因为我可以不使用这个特性直接更改值,即使通过使用观察代码,代码中的行数正在增加,通过创建
MutableLiveData
,这与
ViewModel
中的相同

下图
ViewModel
code 公共类FirstViewModel扩展了ViewModel{

    // Create a LiveData with a String
    public MutableLiveData<String> mCurrentName;


    public MutableLiveData<String> getCurrentName() {
        if (mCurrentName == null) {
            mCurrentName = new MutableLiveData<String>();
        }
        return mCurrentName;
    }


}
//使用字符串创建LiveData
公共可变LiveData mCurrentName;
public MutableLiveData getCurrentName(){
if(mCurrentName==null){
mCurrentName=new MutableLiveData();
}
返回mCurrentName;
}
}
在活动中使用

public class MainActivity extends AppCompatActivity {
    private FirstViewModel mModel;
ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mBinding=DataBindingUtil.setContentView(this,R.layout.activity_main);


        // Get the ViewModel.
        mModel= ViewModelProviders.of(this).get(FirstViewModel.class);


        // Create the observer which updates the UI.
        final Observer<String> nameObserver = new Observer<String>() {
            @Override
            public void onChanged(@Nullable final String newName) {
                // Update the UI, in this case, a TextView.
                mBinding.mNameTextView.setText(newName);
            }
        };

        // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
        mModel.getCurrentName().observe(this, nameObserver);


       mBinding.btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

              String anotherName = mBinding.etField.getText().toString();
             mModel.getCurrentName().setValue(anotherName);
            }
        });

    }
}
public类MainActivity扩展了AppCompatActivity{
私有FirstViewModel mModel;
活动记忆;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mBinding=DataBindingUtil.setContentView(this,R.layout.activity_main);
//获取ViewModel。
mModel=ViewModelProviders.of(this.get)(FirstViewModel.class);
//创建更新UI的观察者。
最终观察员名称观察员=新观察员(){
@凌驾
公共void onChanged(@Nullable final String newName){
//更新UI,在本例中为TextView。
mBinding.mNameTextView.setText(newName);
}
};
//观察LiveData,作为LifecycleOwner和observer传入此活动。
mModel.getCurrentName().observe(this,nameObserver);
mBinding.btnSubmit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
String anotherName=mBinding.etField.getText().toString();
mModel.getCurrentName().setValue(另一个名称);
}
});
}
}

您可以从中阅读实时数据。它就像
Observer
一样,查找数据的更改,并通知观察者可观察对象已更改

您可以从中读取实时数据。这就像
Observer
查找数据的更改,并通知Observer可观察的对象已更改

简单地说,当我们深入到活动/片段生命周期处理等细节时,它使您的程序员生活变得轻松愉快,显示更新的数据,更重要的是将表示层与业务逻辑分离,并创建一个结构更完善的应用程序。请从

中找到更多详细信息,简单地说,当我们深入到诸如活动/片段生命周期处理、显示更新数据、更重要的是将表示层与业务逻辑分离以及创建结构更为完善的应用程序等细节时,这将使您的程序员生活更加愉快。请从
ViewModel
LiveData
android架构组件中查找更多详细信息,这些组件共同帮助创建生命周期感知应用程序

视图模型: ViewModel类通常用于将视图逻辑(存在于活动类中)与ViewModel类中包含的业务逻辑显著隔离。这种分离是一种很好的架构设计,在维护大型项目时变得非常重要

LiveData: LiveData有助于以生命周期感知的方式实现


在您的情况下,它可能看起来很简单,因为您只为
TextView
设置值。但是,考虑常见的场景,比如点击API来检索数据等等。在这种情况下,<代码> VIEWSMODS负责提供在“代码>活动< /代码>中显示的数据,在
LiveData
的帮助下,可以轻松确保生命周期感知,从而帮助避免崩溃。

ViewModel和
LiveData
android体系结构组件一起帮助创建生命周期感知的应用程序

视图模型: ViewModel类通常用于将视图逻辑(存在于活动类中)与ViewModel类中包含的业务逻辑显著隔离。这种分离是一种很好的架构设计,在维护大型项目时变得非常重要

LiveData: LiveData有助于以生命周期感知的方式实现

在您的情况下,它可能看起来很简单,因为您只为
TextView
设置值。但是,考虑常见的场景,比如点击API来检索数据等。在这种情况下, VIEWMDES/<代码>负责提供在<代码>活动中显示的数据,在<代码> LIFEDATA < /代码>的帮助下,可以通过确保生命周期意识轻松地避免崩溃。