Android Architecture Components(Android 架构组件)

Android架构组件:

  1. 生命周期相关的Lifecycle-aware Components
  2. 数据库解决方案Room

设计App架构的基本原则

  • Soc原则Separation of concerns 分离关注点原则,简而言之就是要模块化,低耦合。从Android的角度来看就是不要将任何和操作UI以及和调用系统组件无关的代码放到Activity或者Fragment中,因为系统可能因为内存紧张等原因随时杀掉Activity或者Fragment。
  • Model驱动UI,最好是用持久化的数据的Model(即保存到本地的数据)。为什么是持久化的数据呢?主要有一下两点:
  1. 由于数据是持久化存储的,所以当系统因为各种原因回收资源时,并不会造成数据的丢失。
  2. 在网络条件不稳定或者网络无法连接的情况下,App仍然可以工作。
    那么Model是什么呢?如果熟悉MVP的话,很容易理解Model的概念,即MVP中的M。它是一个独立于Activity/Framgment用于保存数据的类。因为它是独立于系统组件的,因此,不受系统生命周期的的影响。

参数传递

给Fragment传递参数的方法最好方法是使用fragment arguments,因为如果系统在一些情况下直接杀死了App对应的进程,那么通过这种方法传递的参数就会被保存,并在App下次恢复启动的时候被读取到。

 @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        String userId=getArguments().getString(UID_KEY);//获取arguments参数
        viewModel= ViewModelProviders.of(this).get(UserProfileViewModel.class);
        viewModel.init(userId);
        viewModel.getUser().observe(this, new Observer<User>() {
            @Override
            public void onChanged(@Nullable User user) {
                //update UI
            }
        });
    }

什么是ViewModel?
  ViewModel是为特定的UI(例如Activity/Fragment)提供数据的类,同时它也承担和数据相关的业务逻辑处理功能:比如根据uid请求网络获取完整的用户信息,或者将用户修改的头像上传到服务器。因为ViewModel是独立于View(例如Activity/Fragment)这一层的,所以并不会被View层的事件影响,比如Activity被回收或者屏幕旋转等并不会造成ViewModel的改变。

什么是LiveData呢?

  LiveData是一个包含可以被观察的数据载体 。这么说又有点不好理解了,其实他就是基于观察者模式去做的。 当LiveData的数据发生变化时,所有对这个LiveData变化感兴趣的类都会收到变化的更新。 并且他们之间并没有类似于接口回调这样的明确的依赖关系。LiveData还能够感知组件( 例如activities, fragments, services )的生命周期,防止内存泄漏。LiveData能够在组件生命周期结束后自动阻断数据流的传播,防止产生空指针等意外。 当对应的Fragment生命周期结束时,自动释放持有的引用。


猜你喜欢

转载自blog.csdn.net/flyingdream123/article/details/80469166