为了使开发者能尽快在 Android 平台上开发出高质量的项目,Android 官方推出了 Android Jetpack 项目,旨在从基础,架构,行为以及界面 4 大方面体系化地为咱们提供组件级别的支持。固然,在实际开发过程当中,咱们的旧项目甚至是新项目都不可能彻底采用其所有的解决方案。通常来讲咱们都是各取所需,汲长补短。bash
我最关注的是其所提供的架构方面的组件, 这一套架构的核心组件Lifecycles、LiveData、ViewModel、Room也被称之为 AAC。经过 AAC + DataBinding+ MVVM 所打造的应用的基础架构,就目前的实践来看,是特别简洁且高效的。对于中小型项目来讲,是优秀的可选方案之一。而今天咱们要了解的就是 Lifecycles 组件。架构
Lifecyces 根据官方的解释,是一个生命可感知的组件。以下是官方关于 Lifecycels 的一张功能说明图。ide
从图上来看,其主要包括了状态(states)以及事件(events)两个概念,且状态与事件也是一一对应的。ui
不过,如今看这张图确定是有一点懵逼的。咱们须要经过分解一下官方的 demo 来直观感觉一下 Lifecycles 的用法。其过程以下:this
1. 实现LifecycleObserverspa
首先咱们须要实现一个 LifecycleObserver,你能够把它等同于观察者模式中的 Observer。在这里,它就是事件的接受收器。而对于每个不一样的事件,则经过在实现类的方法中添加相应的 @OnLifecycleEvent(Lifecycle.Event.xxx) 注解来实现的。具体代码以下所示。3d
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
}
}
复制代码
2. 实现 LifecycleOwnercode
其次就是要实现一个 LifecycleOwner,通常来讲就是 Activity 或者 Fragment 来实现是比较合适的。固然,不是这 2 者中的一个,也是能够的,只要你愿意。cdn
public class MyActivity extends Activity implements LifecycleOwner {
@NonNull
@Override
public Lifecycle getLifecycle() {
return null;
}
}
复制代码
3. 向 LifecycleOwner 注册 LifecycleObserver,创建起二者之间的链接server
有了接收事件的观察者/接收者,也有了发送事件的生命周期拥有者/发送者,其不可能无缘无故的就创建起链接的。所以,咱们须要一个链接者——LifecycleRegistry。通常来讲,咱们在实现了 LifecycleOwner 的 Activity 中声明它的变量,并在 onCreate() 方法中实例化。而后再经过变量向其添加 LifecycleObserver。以下代码所示。
public class MyActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
getLifecycle().addObserver(new MyObserver());
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
复制代码
4. mark 状态,"发送"事件
接下来,咱们须要在其生命周期的方法里,mark 出生命周期的状态以使得其能够产生一个对应的事件发送到 LifecycleObserver 相应的方法上。以下代码所示。
public class MyActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
......
......
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
复制代码
经过以上 4 个步骤后,之后不再用逐个逐个在生周期里面去调用相应的 Listener 或者 Controller 了。
从原理图上看,以 LifecycleRegistry 为中心,其拥有一个 LifecycleOwner 实例和多个 LifecycleObserver 实例。由 LifecycleOwner 经过 LifecycleRegistry 来 markState ,而后又由其来 dispatch 各个 Event 到全部 LifecycleOwner 的相应事件的方法中。
关于 Lifecycles 组件就讲这么多,暂时也不打算涉及到其源码的分析。
最后,感谢你能读到并读完此文章。受限于做者水平有限,若是存在错误或者疑问都欢迎留言讨论。若是个人分享可以帮助到你,也请记得帮忙点个赞吧,鼓励我继续写下去,谢谢。