本文共 3511 字,大约阅读时间需要 11 分钟。
LifeCycle是Jetpack中的一个组件,它的功能就是能感知生命周期的变化。这么说可能很抽象,就简单理解为LifeCycle就是一个类:LifeCycle.java,我们可以借助这个类的功能来让我们在Android中写的代码,除了Activity或Fragment这两个类本身有生命周期,其他类都能感知这两个类的生命周期变化,而且使用起来特别方便,底层都由Google封装好了。当然你会说,我们自己也可以实现这个功能呀,用接口回调或者一些第三方消息通知框架(如Eventbus等等),接下来就通过普通的方式和Google的Jetpack LifeCycle来实现对比一下。
让普通的Test1.java类感知activity、fragment的生命周期的变化:
先定义一个接口:
public interface LifeListener { void onCreate(); void onStart(); void onResume(); void onPause(); void onStop(); void onDestroy();}
写一个普通类Test1.java,实现这个接口:
public class Test1 implements LifeListener{ @Override public void onCreate() { Log.i("TAG", "Test1类接收到了activity的onCreate()生命周期"); } @Override public void onStart() { Log.i("TAG", "Test1类接收到了activity的onStart()生命周期"); } @Override public void onResume() { Log.i("TAG", "Test1类接收到了activity的onResume()生命周期"); } @Override public void onPause() { Log.i("TAG", "Test1类接收到了activity的onPause()生命周期"); } @Override public void onStop() { Log.i("TAG", "Test1类接收到了activity的onStop()生命周期"); } @Override public void onDestroy() { Log.i("TAG", "Test1类接收到了activity的onDestroy()生命周期"); }}
然后在TestActivity.java类中的各个生命周期方法中回调:
public class TestActivity extends AppCompatActivity { private LifeListener mListener; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListener = new Test1(); mListener.onCreate(); } @Override protected void onStart() { super.onStart(); mListener.onStart(); } @Override protected void onResume() { super.onResume(); mListener.onResume(); } @Override protected void onPause() { super.onPause(); mListener.onPause(); } @Override protected void onStop() { super.onStop(); mListener.onStop(); } @Override protected void onDestroy() { super.onDestroy(); mListener.onDestroy(); }}
打开页面,然后退出页面,结果打印:日志输出
这种方式的优点就是原理简单,自己知道如何实现的,缺点就是代码臃肿,复杂。
是一个类,它持有关于组件(如 Activity 或 Fragment)生命周期状态的信息,并且允许其他对象观察此状态。
普通的一个自己的类:Test.java
public class Test implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) public void onCreate() { Log.i("TAG", "Test类接收到了activity的onCreate()生命周期"); } @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { Log.i("TAG", "Test类接收到了activity的onStart()生命周期"); } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onResume() { Log.i("TAG", "Test类接收到了activity的onResume()生命周期"); } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onPause() { Log.i("TAG", "Test类接收到了activity的onPause()生命周期"); } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { Log.i("TAG", "Test类接收到了activity的onStop()生命周期"); } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestroy() { Log.i("TAG", "Test类接收到了activity的onDestroy()生命周期"); }}
TestActivity.java类,一行代码搞定:
public class TestActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册生命周期的监听对象 getLifecycle().addObserver(new Test()); }}
页面打开,返回退出,结果日志输出:
优点:一行代码搞定对activity的生命周期的注册,并使用注解的方式来监听生命周期的变化。下一篇分析LifeCycle的原理。
转载地址:http://brxti.baihongyu.com/