Skip to content
This repository has been archived by the owner on Feb 25, 2019. It is now read-only.
xiaobailong24 edited this page Sep 18, 2017 · 4 revisions

Welcome to the MVVMArms wiki!

知识储备

1 MVVM 关键技术介绍

1.1 Model

框架中,数据的获取是通过 Model 层获取的,在 Model 中持有一个数据管理类对象- RepositoryManager(实现了 IRepositoryManager 接口),分别可以通过 Retrofit 获取网络数据,通过 Room 获取 SQLite 数据库中的持久化数据。具体实现可查看源码链接:

Room 的使用需要在 gradle 中添加:

android {
...

    //Room
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation":
                                 "$projectDir/schemas".toString()]
        }
    }
}

1.2 ViewModel

ViewModel 是整个框架比较新颖和重要的部分,BaseViewModel 继承于 Components 中的 AndroidViewModel,并实现了 LifecycleObserver 接口;它持有 Model 的引用,主要的业务逻辑都是在 ViewModel 中实现的;ViewModel 中UI相关的数据通过 LiveData 包装,使得当数据变化时,自动反映到UI上,实现了数据UI。在 xml 布局文件中,通过 Data Binding 绑定对应的 ViewModel。 BaseViewModel 源码如下:

1.3 View

框架封装了 ArmsActivityArmsFragment,它们都实现了 Components 中的 LifecycleRegistryOwner 接口来处理生命周期。上面提到在 xml 布局中绑定 ViewModel,而 ViewModel 的创建和生命周期绑定是在 Activity/Fragment 中进行的,具体是通过 Components 中提供的 ViewModelProviders 类完成的。下面是创建 ViewModel 的实例:

//创建ViewModel
mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(WeatherViewModel.class);
  • mViewModel 是通过泛型封装在 ArmsActivityArmsFragment 中的;
  • 同样,mViewModelFactory 是通过 Dagger 将 ViewModelFactory 注入在 ArmsActivityArmsFragment 中的。
  • ViewModelProviders.of() 是一个重载的方法,通过传入的第一个参数,限定该 ViewModel 与 哪个 Activity/Fragment 进行生命周期绑定。

创建好了 ViewModel 后,在 ArmsActivityArmsFragment 设置 ViewModel 监听 Lifecyle 的回调:

if (mViewModel != null)
    getLifecycle().addObserver((LifecycleObserver) mViewModel);

同时,需要将上述提到的 xml 中绑定的 ViewModel 进行设置,这就很简单了,示例代码如下:

mBinding.setViewModel(mViewModel);

2 Dagger.Android 层级依赖关系

MVVMArms系列 - 最新的 Dagger2.11 多 Module 实战详解

更多内容敬请期待!