【Jetpack】学穿:Lifecycle → 生命周期 (原理篇)(上)

简介: 本质上是围绕着这两个设计模式进行的:模板模式 → 定义算法骨架,对外开放扩展点,基于 继承 关系实现,子类重写父类抽象方法;观察者模式 → 对象间定义一对多的依赖,当一个对象状态发生改变,依赖对象都会自动收到通知;

0x1、Lifecycle核心思想


本质上是围绕着这两个设计模式进行的:


  • 模板模式 → 定义算法骨架,对外开放扩展点,基于 继承 关系实现,子类重写父类抽象方法;
  • 观察者模式 → 对象间定义一对多的依赖,当一个对象状态发生改变,依赖对象都会自动收到通知;


对这两种模式不了解的强烈建议看下笔者之前写的专栏:《把书读薄 | 设计模式之美》


本节先肝下Lifecycle组件的两个库 lifecycle-commonlifecycle-runtime 的源码,了解实现原理,在肝Activity、Fragment中Lifecycle是如何发挥作用的。希望通过这节,能让你在实际开中能够有的放矢,放心大胆地用上Lifecycle。


0x2、lifecycle-common 源码解读


lifecycle-common 包中包含下述文件,挑着看:


网络异常,图片无法展示
|


① Lifecycle抽象类


网络异常,图片无法展示
|


类中定义了生命周期事件和状态,先看 Event,枚举了7种生命周期事件:


ON_CREATEON_STARTON_RESUMEON_PAUSEON_STOPON_DESTROYON_ANY


定义了状态升级、降级的四个方法:


downFrom()downTo()upFrom()upTo()


这里的升降级,读者看了可能会有点懵,可以把之前那个图竖着看:


网络异常,图片无法展示
|


以downFrom()为例,从传入状态降级,返回对应State:


网络异常,图片无法展示
|


从CREATED往下走,调用OnDestory,从STARTED往下走,调用onStop(),从RESUME往下走,调用onPause()


嘿嘿,是不是一下子就看懂了,再看下downTo():


网络异常,图片无法展示
|


往下走到DESTORYED,调用onDestory(),往下走到CREATED,调用onStop(),剩下两个也是类似~


然后还有个 getTargetState()


网络异常,图片无法展示
|


这个就更好理解了,调用onCreate()、onStop()会处于CREATED状态,其他同理。


说完Event说State,更简单,定义了定义了5个状态的枚举值:


DESTROYEDINITIALIZEDCREATEDSTARTEDRESUMED


以及一个判断状态是否相等的方法:


网络异常,图片无法展示
|


最后定义了三个抽象方法:


addObserver()、removeObserver()、getCurrentState()


可以把Lifecycle看作 抽象被观察者,抽取出生命周期事件与状态,统一状态流转过程,并提供了增删观察者的抽象方法供 具体被观察者 实现。


② LifecycleObserver接口


空接口,类型标记,可看作 抽象观察者


网络异常,图片无法展示
|


③ FullLifecycleObserver、LifecycleEventObserver接口


都继承LifecycleObserver接口,提供了两类不同的回调:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


一种是详细的生命周期回调,一种是有状态变化就回调,前者优先级大于后者。


④ DefaultLifecycleObserver接口


继承 FullLifecycleObserver,这里用到了Java 8后才有的特性:接口声明默认方法,默认重写了回调方法,具体观察者 按需实现关注的回调方法即可。


public interface DefaultLifecycleObserver extends FullLifecycleObserver {
    @Override default void onCreate(@NonNull LifecycleOwner owner) { }
    @Override default void onStart(@NonNull LifecycleOwner owner) { }
    @Override default void onResume(@NonNull LifecycleOwner owner) { }
    @Override default void onPause(@NonNull LifecycleOwner owner) { }
    @Override default void onStop(@NonNull LifecycleOwner owner) { }
    @Override default void onDestroy(@NonNull LifecycleOwner owner) { }
}


⑤ LifecycleOwner接口


提供一个获取 Lifecycle 的方法:


网络异常,图片无法展示
|


相关文章
|
Java API Android开发
Jetpack 之 LifeCycle 组件原理解析
1. LifeCycle 是如何监听到 Activity/Fragment 生命周期变化的? 2. LifeCycle 如何将生命周期变化的事件分发给观察者的?
126 0
Jetpack 之 LifeCycle 组件原理解析
|
Java API 开发工具
Jetpack 之 LifeCycle 组件使用详解
LifeCycle 是一个可以感知宿主生命周期变化的组件。常见的宿主包括 Activity/Fragment、Service 和 Application。LifeCycle 会持有宿主的生命周期状态的信息,当宿主生命周期发生变化时,会通知监听宿主的观察者。
122 0
Jetpack 之 LifeCycle 组件使用详解
|
安全 Android开发
Android Jetpack系列之Lifecycle
`Lifecycle`可以让某一个类变成`Activity`、`Fragment`的生命周期观察者类,监听其生命周期的变化并可以做出响应。`Lifecycle`使得代码更有条理性、精简、易于维护。
106 0
|
6月前
|
存储 安全 Android开发
构建高效的Android应用:Kotlin与Jetpack的结合
【5月更文挑战第31天】 在移动开发的世界中,Android 平台因其开放性和广泛的用户基础而备受开发者青睐。随着技术的进步和用户需求的不断升级,开发一个高效、流畅且易于维护的 Android 应用变得愈发重要。本文将探讨如何通过结合现代编程语言 Kotlin 和 Android Jetpack 组件来提升 Android 应用的性能和可维护性。我们将深入分析 Kotlin 语言的优势,探索 Jetpack 组件的核心功能,并通过实例演示如何在实际项目中应用这些技术。
|
5月前
|
数据管理 API 数据库
探索Android Jetpack:现代安卓开发的利器
Android Jetpack是谷歌为简化和优化安卓应用开发而推出的一套高级组件库。本文深入探讨了Jetpack的主要构成及其在应用开发中的实际运用,展示了如何通过使用这些工具来提升开发效率和应用性能。
|
4月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
70 4
|
5月前
|
Android开发
Jetpack Compose: Hello Android
Jetpack Compose: Hello Android
|
6月前
|
Java 数据库 Android开发
构建高效Android应用:Kotlin与Jetpack的完美结合
【5月更文挑战第28天】 在现代移动开发领域,Android平台以其广泛的用户基础和开放性受到开发者青睐。随着技术的不断进步,Kotlin语言以其简洁性和功能性成为Android开发的首选。而Android Jetpack组件则为开发者提供了一套高质量的设计架构、工具和UI组件,以简化应用程序的开发过程。本文将探讨如何利用Kotlin语言和Android Jetpack组件共同构建一个高效的Android应用程序,涵盖从语言特性到架构模式的全面分析,并提供具体的实践指导。
|
6月前
|
安全 数据库 Android开发
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【5月更文挑战第22天】 在移动开发领域,Android系统因其开放性和广泛的用户基础而备受开发者青睐。随着技术的不断演进,Kotlin语言以其简洁性和功能性成为Android开发的首选语言。本文将深入探讨如何结合Kotlin和Android Jetpack组件来构建一个高效且易于维护的Android应用。我们将重点讨论如何使用Jetpack的核心组件,如LiveData、ViewModel和Room,以及Kotlin的语言特性来优化代码结构,提高应用性能,并简化数据管理。通过具体案例分析,本文旨在为开发者提供一套实用的技术指导,帮助他们在竞争激烈的市场中脱颖而出。