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

简介: 本节继续学穿Jetpack,带来第二个组件 Lifecycle,用于帮助开发者管理Activity、Fragment的生命周期,它可是LiveData、ViewModel等组件的基石。

0x1、Lifecycle简介


本节继续学穿Jetpack,带来第二个组件 Lifecycle,用于帮助开发者管理Activity、Fragment的生命周期,它可是LiveData、ViewModel等组件的基石。


日常开发中经常会遇到这些问题:


  • 需要在Activity、Fragment的生命周期回调中执行特定操作,否则会引起 程序错误内存泄露,比如:无限循环的属性动画忘记在onDestory中取消,Eventbus忘记在onDestory中unregister等。不要想着自己小心注意就好,在多人协作的场景下,特别是在多人协作的场景下;


  • 一种常规解法:写个 基类,重写生命周期回调方法,把操作代码都堆到各个方法中,以此规避认为的疏忽。可以,但是也导致了基类臃肿不堪,不好维护,而且有些 子类被迫继承 一堆不需要的操作;


  • 可能存在不符预期的生命周期情况,比如onCreate()里发起一个异步回调,但因为回调比较耗时,等到回调时已经处于onStop()状态了,回调里的操作可能没意义了,所以需要拿到当前所处的生命周期状态。


  • 一种常规解法:额外定义一个哨岗值,在生命周期回调方法中去修改这个值,异步回调根据这个值执行相应操作。


Lifecycle 的出现,就是帮助开发者解决上述问题:


将组件的生命周期状态信息隔离出来统一管理,并允许其他对象进行观察。


0x2、Lifecycle使用


Tips:部分内容搬运自官方文档:《使用生命周期感知型组件处理生命周期》


① 依赖引入


// 非Androidx
implementation "android.arch.lifecycle:extensions:1.1.1"
// Androidx
implementation 'androidx.appcompat:appcompat:1.4.1'


只需依赖一个appcompat即可,打开左侧 External Libraries 可以看到和lifecycle相关的库:


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


键入:gradlew :app:dependencies 查看依赖树,可以看到core、activity等模块都依赖lifecycle了~


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


一般无需额外依赖配置即可使用,当然如果对库版本有要求、或是使用特殊情况下的扩展类,可以单独依赖,如:


// 注解处理器 
annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.3.1"
// Java 8支持的 DefaultLifecycleObserver
implementation "androidx.lifecycle:lifecycle-common-java8:2.3.1"
// 实现Service的LifecycleOwner
implementation "androidx.lifecycle:lifecycle-service:2.3.1"
// ProcessLifecycleOwner给整个app进程提供一个lifecycle
implementation "androidx.lifecycle:lifecycle-process:2.3.1"
// ReactiveStreams support for LiveData
implementation "androidx.lifecycle:lifecycle-reactivestreams:2.3.1"


关于库的版本号及其依赖的库,可到 MVNRepository 输入包名自行查询:


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


Tips:如果单纯只想用Lifecycle,只需引入lifecycle-runtime,不过它一般是跟LiveData、ViewModel一起使用的。


② 基本使用


  • 自定义观察者 → 观察者实现 DefaultLifecycleObserver 接口并重写相应方法来监控组件生命周期;


  • 组件添加观察者getLifecycle() 获取Lifecycle实例,调用 addObserve()

Tips:旧版的写法 → 观察者实现 LifecycleObserver,通过 OnLifecycleEvent注解 的方式添加对应生命周期的方法,但这种写法已经废弃了,文档注释中建议使用 DefaultLifecycleObserver 或者 LifecycleEventObserver


使用代码示例如下


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

相关文章
|
Java API Android开发
Jetpack 之 LifeCycle 组件原理解析
1. LifeCycle 是如何监听到 Activity/Fragment 生命周期变化的? 2. LifeCycle 如何将生命周期变化的事件分发给观察者的?
129 0
Jetpack 之 LifeCycle 组件原理解析
|
Java API 开发工具
Jetpack 之 LifeCycle 组件使用详解
LifeCycle 是一个可以感知宿主生命周期变化的组件。常见的宿主包括 Activity/Fragment、Service 和 Application。LifeCycle 会持有宿主的生命周期状态的信息,当宿主生命周期发生变化时,会通知监听宿主的观察者。
124 0
Jetpack 之 LifeCycle 组件使用详解
|
安全 Android开发
Android Jetpack系列之Lifecycle
`Lifecycle`可以让某一个类变成`Activity`、`Fragment`的生命周期观察者类,监听其生命周期的变化并可以做出响应。`Lifecycle`使得代码更有条理性、精简、易于维护。
107 0
|
安全 API 调度
Jetpack 系列(1)—— Lifecycle:生命周期感知型组件的基础
Jetpack 系列(1)—— Lifecycle:生命周期感知型组件的基础
283 0
Jetpack 系列(1)—— Lifecycle:生命周期感知型组件的基础
|
缓存 前端开发 Java
2022 · 让我带你Jetpack架构组件从入门到精通 — Lifecycle
不是标题党!作者会尽力把文章写的更容易理解也更充满深度,本文也随作者的持续学习,持续更新,有问题欢迎在评论区提出~
|
API Android开发 Kotlin
【Jetpack】学穿:Activity Results API(下)
【Jetpack】学穿:Activity Results API
368 0
|
7月前
|
存储 安全 Android开发
构建高效的Android应用:Kotlin与Jetpack的结合
【5月更文挑战第31天】 在移动开发的世界中,Android 平台因其开放性和广泛的用户基础而备受开发者青睐。随着技术的进步和用户需求的不断升级,开发一个高效、流畅且易于维护的 Android 应用变得愈发重要。本文将探讨如何通过结合现代编程语言 Kotlin 和 Android Jetpack 组件来提升 Android 应用的性能和可维护性。我们将深入分析 Kotlin 语言的优势,探索 Jetpack 组件的核心功能,并通过实例演示如何在实际项目中应用这些技术。
|
6月前
|
数据管理 API 数据库
探索Android Jetpack:现代安卓开发的利器
Android Jetpack是谷歌为简化和优化安卓应用开发而推出的一套高级组件库。本文深入探讨了Jetpack的主要构成及其在应用开发中的实际运用,展示了如何通过使用这些工具来提升开发效率和应用性能。
|
5月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
71 4