Android从零开始搭建MVVM架构(5)————Lifecycles

在真正接触并使用MVVM架构的时候,整我的都很差了。由于我的以为,MVVM相对于MVC、MVP学习难度比较大,设计的知识点不是一点半点。因此想慢慢记录下本身的成长。若有错误但愿指正。java


从零开始搭建MVVM架构系列文章(持续更新):
Android从零开始搭建MVVM架构(1)————DataBinding
Android从零开始搭建MVVM架构(2)————ViewModel
Android从零开始搭建MVVM架构(3)————LiveData
Android从零开始搭建MVVM架构(4)————Room(从入门到进阶)
Android从零开始搭建MVVM架构(5)————Lifecycles
Android从零开始搭建MVVM架构(6)————使用玩Android API带你搭建MVVM框架(初级篇)
Android从零开始搭建MVVM架构(7) ———— 使用玩Android API带你搭建MVVM框架(终极篇)git


仍是那张图AAC(Android Architecture Components)github

这篇咱们讲Lifecycles,让咱们了解和认识Lifecycles后,最终运用到咱们的MVVM的项目中去。本文是本身的总结,若有错误,请指正架构


1、Lifecycles介绍和简单认识

介绍:能感知生命周期的组件
做用:监测Activity/Fragment等生命周期组件在生命周期变化时,能及时通知其余组件框架

其中包括了LifecycleOwner、LifecycleObserver。咱们能够这么理解,实现了LifecycleOwner就是被观察者,咱们能够看源码(Returns the Lifecycle of the provider,生命周期的提供方,那么久能够认为是被观察),而LifecycleObserver能够是观察者。ide

想一想,若是咱们没有LiveData组件,可是还要实现:Activity的生命周期处于onStart与onResume时,LiveData处于活动状态,才会把更新的数据通知至对应的Activity ,若是生命周期处于onStop或者onPause时,不回调数据更新,直至生命周期为onResume时,当即回调。没有LiveData咱们就要在代码里和Activity里写一堆判断去实现这个功能,而如今Lifecycles已经帮咱们实现了这个功能了,咱们只管用。来看看咱们以前说的LiveData,LiveData监听改变的代码:post

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this这里的类型就是LifecycleOwner,
        liveData.observe(this, new Observer<String>() {
            //这里就就是一旦被观察者LifecycleOwner的生命周期改变,就会通知观察者liveData调用onChanged。
            @Override
            public void onChanged(String s) {
                
            }
        });
    }
复制代码

为何这里能直接用this呢? 以前也解释过了,在26版本之后的Support库中,AppCompatActivity和SupportActivity中都实现了LifecycleOwner,内部已经对UI界面的生命周期作了处理了。咱们能够直接代码点进去,以下学习

这里若是还不清晰的话,咱们来本身实现LifecycleOwner、LifecycleObserver(要知道google的组件,内部已是帮咱们处理好的)this


2、本身实现LifecycleOwner(被观察者的生命周期)

  • 咱们建立一个Actvity,继承Activity类,注意是没有实现LifecycleOwner的。
  • 本身实现LifecycleOwner,并提供被观察者的生命周期
  • new 一个LiveData,并实现LiveData数据改变监听。
  • 在onstop的时候,给LiveData post个数据

Activity以下:google

public class LifecyclesActivity extends Activity implements LifecycleOwner {
    private MutableLiveData<String> liveData = new MutableLiveData<>();
    private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycles);
        liveData.observe(this, new Observer<String>() {
            @Override
            public void onChanged(String s) {
                LogUtils.i("观察LiveData", " ==> " + s);
            }
        });

    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        mLifecycleRegistry.markState(Lifecycle.State.CREATED);
        super.onSaveInstanceState(outState);
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }

    @Override
    protected void onStop() {
        super.onStop();
        liveData.postValue("运行试试");
    }
}
复制代码

运行后看打印,按home键退出去,而后点击回来。一样出现了咱们以前LiveData的效果同样:离开界面的时候不会打印,当返回界面的时候当即打印。


3、本身实现LifecycleObserver(观察者)

咱们本身新建一个MyObserver,监听全部生命周期

public class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        LogUtils.i("MyObserver","onCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        LogUtils.i("MyObserver","onStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        LogUtils.i("MyObserver","onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        LogUtils.i("MyObserver","onPause");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        LogUtils.i("MyObserver","onStop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestory() {
        LogUtils.i("MyObserver","onDestory");
    }

// @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
// public void onAny() {
// LogUtils.i("MyObserver","onAny");
// }
}
复制代码

而后Activtiy里,加上

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycles);
        getLifecycle().addObserver(new MyObserver());

    }
复制代码

运行后,看打印,这里我就不贴效果了。当咱们在项目里用到Lifecycles时,以上这些都不用咱们考虑。我这里只是简单告诉你们,lifecycles究竟是怎么个意思。google已经把咱们要处理的都封装在这些组件里。

至此这里咱们对lifecycles有了大概了解了。加油

本文demo地址

相关文章
相关标签/搜索