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

- ViewModel的生命周期比Activity或者Fragment长,因此 ViewModel不能持有Context的对象,不然会出现内存泄漏。
- 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);
//.....
网友评论