一、LifeCycle的简单介绍
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();
}
}
打开页面,然后退出页面,结果打印:日志输出
这种方式的优点就是原理简单,自己知道如何实现的,缺点就是代码臃肿,复杂。
三、Jetpack实现
Lifecycle 是一个类,它持有关于组件(如 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的原理。