1.生命周期感知组件
生命周期感知组件可以对Activity和Fragment这类的具有生命周期的组件在生命周期变化的时候做出相应。使用生命周期组件可以使你的代码更轻量,更有组织性,也更容易维护。
我们经常直接在Activity和Fragment的生命周期回调方法里编写与生命周期相关组件的代码(比如在onCreate中注册,在onDestroy中解绑),如果在某个Activity中这样的代码很多,或者有些组件不仅需要简单的注册和解绑,还需要在注册和解绑时添加逻辑判断,那这样的代码将会是难以修改和维护的,使用生命周期感知组件可以将这些依赖生命周期的代码从生命周期回调函数中移出去,放到那些组件自己的类中。
2.Lifecycle库
我们可以通过Architecture Components中的Lifecycle库中的类和接口构建生命周期感知组件。可以通过这篇文档,将Lifecycle库引入到AndroidStudio。
2.1LifecycleOwner
LifecycleOwner是一个接口,任何具有Android生命周期的组件都可以实现它(比如Activity和Fragment,在Support Library 26.1.0之后,都已经实现了LifecycleOwner接口),这个接口只有一个方法Lifecycle getLifecycle()
,返回一个Lifecycle对象。
如果你想要自定义一个LifecycleOwner,你可以使用LifecycleRegistry类,但是要将生命周期相关的事件转发到这个类中。
public class MyActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry lifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleRegistry = new LifecycleRegistry(this);
lifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
lifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return lifecycleRegistry;
}
}
复制代码
2.2Lifecycle
Lifecycle是一个保存了其对应的LifecycleOwner组件的生命周期状态的类,并允许其他的组件对生命周期的改变进行观察。观察这个抽象类的源码,发现它只有两个枚举和一组添加和删除观察者Observer的方法。
Event枚举
包含ON_CREATE
,ON_START
,ON_RESUME
,ON_PAUSE
,ON_STOP
,ON_DESTROY
,ON_ANY
,这些生命周期事件对应着Activity和Fragment中的回调事件。
State枚举
包含DESTROYED
,INITIALIZED
,CREATED
,STARTED
,RESUMED
,表示LifecycleOwner组件当前的生命周期状态。
我们可以调用addObserver方法 ,为一个Lifecycle添加监听,监听生命周期拥有者LifecycleOwner的生命周期变化。myLifecycleOwner.getLifecycle().addObserver(new MyObserver());
2.3LifecycleObserver
LifecycleObserver通过注解的方法,来接收LifecycleOwner的生命周期变化的回调。
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}
复制代码