美文网首页
Jetpack学习总结之Lifecycle的使用

Jetpack学习总结之Lifecycle的使用

作者: 大鹏的鹏 | 来源:发表于2019-06-12 10:00 被阅读0次

    一.Lifecycle为何被创造出来

    在Android开发中我们必备的基础知识就是掌握Activity.Fragment的生命周期.在不同的生命周期中我们做不同的操作.
    如果是在Activity我们是很容易感知到其生命周期的变化的.但是在Activity之外要与Activity生命周期绑定就比较麻烦,
    必须要在Activity对应的生命周期中调用该类的方法才能实现.例如:我们在使用MVP架构时,我们的Activity关闭时必须要
    将网络请求移除.所以我们在Presenter中会定义一个onFinish(),当Activity关闭时我们在其onDestroy()调用Presenter
    的onFinish()来通知Presenter我们的Activity关闭了.常规的方式就是这样,这样做有什么问题吗?显然时没有的.但是这样做
    的弊端在哪?其一:每一个Activity的onDestroy()调用Presenter的onFinish(),如果自己忘写了,就坑爹了.其二我们在Activity
    的onDestroy()方法里面还有其他的类需要做处理例如:定位功能等.如果都写道Activity对应的生命周期中就会显得很臃肿,不利于维护.
    针对于这种情况.google在2017的开发者大会上推出Lifecycle组件来解决此类问题?

    二.Lifecycle的定义

    lifecycle是androidx的一个框架库,实现与Activity/Fragment等View的生命周期的同步处理。
    activity 和fragment 是有声明周期的,有时候,我们的很多操作需要写在声明周期的方法中,比如,
    下载,文件操作等,这样很多情况下回导致,我们在activity中的声明周期方法中写越来越多的代码,
    activity或者fragment 越来越臃肿,代码维护越来越困难。 使用lifecycle就可以很好的解决这类问题。
    lifecycle代码简洁,我们可以通过实现LifecycleObserver 接口,来监听声明周期,
    然后我们在activity和fragment中去注册监听。

    三.Lifecycle如何使用

    1.添加依赖:在app或者module目录下的build.gradle中,添加依赖:

    dependencies {
        ......
        implementation "android.arch.lifecycle:extensions:1.1.1"
        // 如果你使用java8开发,可以添加这个依赖,里面只有一个类
        implementation "android.arch.lifecycle:common-java8:1.1.1"
    }
    

    2.实现LifecycleObserver接口

    • java7中

      public class Java7Observer implements LifecycleObserver {
          private static final String TAG = Java7Observer.class.getSimpleName();
      
          @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
          public void onCreate() { Log.d(TAG, "onCreate"); }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_START)
          public void onStart() { Log.d(TAG, "onStart"); }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
          public void onResume() { Log.d(TAG, "onResume"); }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
          public void onPause() { Log.d(TAG, "onPause"); }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
          public void onStop() { Log.d(TAG, "onStop"); }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
          public void onDestroy() { Log.d(TAG, "onDestroy"); }
      }
      
    • java8中

          public class Java8Observer implements DefaultLifecycleObserver {
              private static final String TAG = Java8Observer.class.getSimpleName();
          
              @Override
              public void onCreate(@NonNull LifecycleOwner owner) { Log.d(TAG, "onCreate"); }
          
              @Override
              public void onStart(@NonNull LifecycleOwner owner) { Log.d(TAG, "onStart"); }
          
              @Override
              public void onResume(@NonNull LifecycleOwner owner) { Log.d(TAG, "onResume"); }
          
              @Override
              public void onPause(@NonNull LifecycleOwner owner) { Log.d(TAG, "onPause"); }
          
              @Override
              public void onStop(@NonNull LifecycleOwner owner) { Log.d(TAG, "onStop"); }
          
              @Override
              public void onDestroy(@NonNull LifecycleOwner owner) { Log.d(TAG, "onDestroy"); }
          }
      

    3.将LifecycleObserver添加到Lifecycle的观察者列表

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 直接调用getLifecycle(),添加Observer
            getLifecycle().addObserver(new Java7Observer());
            getLifecycle().addObserver(new Java8Observer());
        }
    }
    #### 4.查看执行结果
    
    执行结果

    参考:
    Android-Lifecycle超能解析-生命周期的那些事儿
    硬核讲解 Jetpack 之 LifeCycle 源码篇

    相关文章

      网友评论

          本文标题:Jetpack学习总结之Lifecycle的使用

          本文链接:https://www.haomeiwen.com/subject/rgkkfctx.html