JetPack之-Lifecycle

Lifecycle介绍

Lifecycle是Google推出的JetPack框架组件的一个,主要是用来感知Activity和Fragment的生命周期,可以帮你写出更简洁,通用的代码。

LifeCycle使用

总共两步

  1. 第一步,编写自己的Observer类文件,并实现对应的监听方法,通过注解实现对响应生命周期方法的监听,代码如下:

    /**
     * 我们用这个观查者来盯好需要感知生命周期的对象
     */
    public class MyLifeObserver  implements LifecycleObserver {
    
        // OnLifecycleEvent()内的注解Lifecycle.Event.XXX 对应不同的生命周期方法,你可以根据需要监听不同的生命周期方法。
        // 方法名可以随意,这里为了方便理解定义为onResumeListener()。
        @OnLifecycleEvent(Lifecycle.Event.ON_START)
        public void onStart(){
            Log.i("Sven","onStart");
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        public void onPause(){
            Log.i("Sven","onPause");
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        public void destory(){
            Log.i("Sven","onDestroy");
        }
    
    }
    
  2. 第二步在被监听的Activity/Fragment内注册:

    public class MainActivity extends AppCompatActivity {
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLifecycle().addObserver(new MyLifeObserver());
      }
    }
    

    注意上面Activity代码中,我们的Activit继承了AppCompatActivity,AppCompatActivity和Fragment都实现了LifecycleOwner接口,所以可以直接拿来使用。如果你被监控的Activity是自定义的Activity,需要手动继承LifecycleOwner,并手动在每个生命周期方法中做标记。

    具体代码如下:

    public class MyActivity extends Activity implements LifecycleOwner {
      private LifecycleRegistry mLifecycleRegistry;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        //创建Lifecycle对象
        mLifecycleRegistry = *new*LifecycleRegistry(this);
        //做标记
        mLifecycleRegistry.markState(Lifecycle.State.CREATED);
        //添加观察者
        getLifecycle().addObserver(new MyLifeObserver());
      }
    
      @NonNull
      @Override
      public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
      }
    
      @Override
      public void onStart() {
        super.onStart();
        //做标记
        mLifecycleRegistry.markState(Lifecycle.State.STARTED);
      }
    
      @Override
      protected void onResume() {
        super.onResume();
        //做标记
        mLifecycleRegistry.markState(Lifecycle.State.RESUMED);
      }
    
      @Override
      protected void onDestroy() {
        super.onDestroy();
        //做标记
                           mLifecycleRegistry.markState(Lifecycle.State.DESTROYED); 
      }
    }
    

总结:

我们创建了Observer对象,然后将Observer的引用交给Lifecycle,在组件生命周期方法执行时,调用Observer的相应方法。我们使用Lifecycle真正的理由是Lifecycle类帮我们处理了大量的与宿主组件生命周期相关的问题,使我们的代码更简洁。专心处理业务逻辑即可。

你可能感兴趣的:(JetPack之-Lifecycle)