1. MVVM 架构
分工
- View 层对应 XML 中的静态UI、 Activity 和 Fragment 中设置显示内容的部分,不处理业务逻辑,不操作或处理数据
- ViewModel 层只处理业务逻辑和操作处理业务数据,不处理UI相关,简单的事件封装成 Command 处理(?),完成 View 与 Model 间的交互
- Model 层执行数据获取、储存、 监听状态变化等,是数据的实体模型
2. ViewMode 与 LiveData
以下示例代码搬运自android 开发者官方网站
ViewMode
- 按生命周期存储和管理与ui相关的数据,允许数据在配置更改(如屏幕旋转)中存活
- 通常情况下,关闭一个 activity 或 fragment 将同时销毁保存在其中的数据,ViewMode实现数据与UI进程同步创建或销毁
- 不必保证数据为可序列化
- 可以保持较大体积的数据
LiveData
可观测的数据持有类。它是生命周期感知的,确保 LiveData 只观测并更新处于活动生命周期状态的应用程序组件
MutableLiveData
LiveData 的子类,包含 postValue(T value) 方法和 setValue(T value) 方法,其中 setValue 在主线程中直接调用赋值, postValue 在子线程中将数据传递到主线程
public class MyViewModel extends ViewModel {
private MutableLiveData<List<User>> users; //储存并修改数据
public LiveData<List<User>> getUsers() {
if (users == null) {
users = new MutableLiveData<List<Users>>();
loadUsers();
}
return users;
}
private void loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
// Create a ViewModel the first time the system calls an activity's onCreate() method.
// Re-created activities receive the same MyViewModel instance created by the first activity.
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, new Observer<users> () {
@Override
public void onChanged(@Nullable users entity) {
// update UI
}