文章目录

  • 简介
  • 优点
  • 实例
  • git地址

简介

MVVM架构也有多种实现方式,目前最火的就是Android官方推荐的AAC设计模式了。
AAC设计模式实现了MVVM的架构,我们先看看AAC的实现架构:

看起来跟MVP架构差不多,但是每一层的功能却不一样。
View层:

  1. 监听UI事件和生命周期,通知到ViewModel;
  2. 由ViewModel通知数据更新,刷新UI展示;

ViewModel层:
3. 只负责业务处理,这一点跟MVP的P层功能相同;
4. 不持有View层的应用,这一点跟MVP的P层不相同,MVP的P层会通过View层暴露的接口间接地"持有"对UI控件的引用,而ViewModel层是完全不会引用到View层的UI控件;
5. ViewModel和View层的交互,完全通过LiveData进行;

Model层:
在AAC中,Model层可以被一个叫做Repository层替代;
Repository层又叫做数据仓库层,所有的数据处理这里完成,然后统一暴露给ViewModel使用。

优点

  1. 各层之间高度解耦;
  2. 自动管理生命周期,不用担心内存泄漏;
  3. 通过LiceData可以实现数据持久化;

实例

V层:

public class TomFragment extends BaseMVVMFragment<TomViewModel> {    @BindView(R.id.tv_fragment_mvvm)    TextView tvMVVM;    @Override    protected TomViewModel getViewModel() {        return ViewModelProviders.of(getActivity()).get(TomViewModel.class);    }    @Override    protected void initViewsAndEvents(Bundle savedInstanceState) {        viewModel.getData().observe(this, new Observer<String>() {            @Override            public void onChanged(@Nullable String s) {                tvMVVM.setText(s);            }        });    }    @Override    protected int getContentViewLayoutID() {        return R.layout.fragment_architecture_mvvm;    }    @OnClick(R.id.btn_fragment_mvvm)    public void onClick(View view) {        switch (view.getId()) {            case R.id.btn_fragment_mvvm:                viewModel.loadData();                break;        }    }}

VM层:

public class TomViewModel extends BaseViewModel<TomRepository> {    public TomViewModel(@NonNull Application application) {        super(application);    }    @Override    protected TomRepository getRepository() {        return new TomRepository(context);    }    public LiveData<String> getData() {        final MutableLiveData<String> liveData = repository.getData();        return liveData;    }    public void loadData() {        repository.getTomData();    }}

M层:

public class TomRepository extends BaseRepository<String> {    private RetrofitManager mRetrofitManager = new RetrofitManager();    public TomRepository(Context context) {        super(context);    }    public MutableLiveData<String> getTomData() {        mRetrofitManager.createApi(MyApplication.getInstance().getApplicationContext(), TestApis.class)                .getTestData()                .map(new Function<List<NameBean>, String>() {                    @Override                    public String apply(List<NameBean> nameBeans) throws Exception {                        String result = nameBeans.toString();                        Thread.sleep(2000);                        return result;                    }                })                .compose(RxUtil.applySchedulers())                .subscribe(new BaseObserver<String>() {                               @Override                               public void onError(ApiException exception) {                               }                               @Override                               public void onSuccess(String result) {                                   liveData.setValue(result);                               }                           }                );        return liveData;    }}

git地址

https://github.com/ddnosh/AndroidQuick

更多相关文章

  1. Android5.0以上的状态栏透明和沉浸式模式兼容底部导航栏与界面重
  2. Android用户界面设计:线性布局
  3. Android播放多张图片形成的一个动画示例
  4. 自己实现的android树控件,android TreeView
  5. Android(安卓)自定义底部上拉控件的实现
  6. Android(安卓)尺寸dp,sp
  7. 安居客Android项目架构演进
  8. Android倒计时控件的实现
  9. Android(安卓)带清除功能的输入框控件EditTextWithDel

随机推荐

  1. 【Android】AsyncTask实现异步处理
  2. Android导入导出txt通讯录工具(源码共享)
  3. Android(安卓)画虚线显示实线的BUG
  4. Android跳转支付宝生活缴费界面
  5. Android(安卓)Activity堆栈信息
  6. 手机上的Wifi分析仪
  7. android视频播放简单实现(VideoView&Media
  8. 快过年了,推荐款好应用
  9. Intent的使用
  10. 使用adb时,为什么只有RockChip的ID需要加