美文网首页
Jetpack -ViewModel

Jetpack -ViewModel

作者: Active_Loser | 来源:发表于2019-10-31 23:32 被阅读0次

一、简介

ViewModel:ViewModel设计的目的就是以生命周期的方式存放和处理和UI相关的数据,并且这些数据不受配置变化(Configuration Changes,例如:旋转屏幕,组件被系统回收)的影响。
ViewModel的生命周期:

ViewModel
  1. ViewModel的生命周期比Activity或者Fragment长,因此 ViewModel不能持有Context的对象,不然会出现内存泄漏。
  2. Activity在生命周期中可能会触发多次onCreate(),而ViewModel则只会在第一次onCreate()时创建,然后直到最后Activity销毁。

ViewModel与SavedInstanceState:

  • SavedInstanceState:通常将需要保存的信息放置SavedInstanceState中,在onceate中获取
  • ViewModel:界面恢复后,数据存在,只需要保存对应的ID即可

二、基本使用

关于LiveData,请移architecture-LiveData
1、在ViewModel中使用创建LiveData

public class UserModel extends ViewModel {
      private final MutableLiveData<User> userLiveData = new MutableLiveData<>();
 
      public LiveData<User> getUser() {
          return userLiveData;
      }
 
      public UserModel() {
          // trigger user load.
      }
 
      void doAction() {
          // depending on the action, do necessary business logic calls and update the
          // userLiveData.
      }
  }

.2、Activity监听数据变化
无参:

public class UserActivity extends AppCompatActivity {
      //...
     ViewModelProviders.of(this).get(UserModel .class)
                .getUser().observe(this, new Observer<User>() {
            @Override
            public void onChanged(@Nullable User user) {
                  //获取数据变化
            }
        });
}

有参

UserModel userModel1=ViewModelProviders.of(this,new UserModel.Factory(user)).get(UserModel.class);
//.....

相关文章

网友评论

      本文标题:Jetpack -ViewModel

      本文链接:https://www.haomeiwen.com/subject/vcnhcctx.html