---- 从这篇文章开始,我将带你全面掌握 Jetpack 组件,系列文章: 一、架构组件: 1、Lifecycle:生命周期感知型组件的基础(本文)[2] 2、LiveData:生命周期感知型数据容器...认识 Lifecycle 1.1 为什么要使用 Lifecycle? Lifecycle 的主要作用是简化实现生命周期感知型组件的复杂度。...} } 而使用 Lifecycle 组件后,能够将分发宿主生命周期事件的方法迁移到功能组件内部,宿主不再需要直接参与调整功能组件的生命周期。...(当然了,Flow 是 Kotlin 生态的组件,不是仅针对 Android 生态的组件),那么 Flow 观察者如何保证在安全的生命周期订阅数据呢?...---- 参考资料 使用生命周期感知型组件处理生命周期[11] —— 官方文档 Lifecycle,看完这次就真的懂了 —— g小志 著 使用 ProcessLifecycle 优雅地监听应用前后台切换
让普通类感知生命周期 Lifecycle 介绍 Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity...ViewModel生命周期 LiveData LiveData 是一个可以保存数据和观察数据变化的组件。...总是最新的数据——当Activity从后台切到前台时,总会收到最新的数据。 适配设备配置变化——如屏幕旋转,组件销毁重建后,立即收到上次的数据。...2、在高精度和低精度地理位置之间的切换.使用生命周期感知型的组件能够使用高精度获取地理位置在你的APP可见时候,当你的APP切换到后台的时候使用低精度更新. 3、启动和关闭视频缓冲.使用生命周期感知型组件来打开视频缓冲....你也可以在在app关闭的时候关闭视频缓冲. 4、启动和关闭网络连接.使用生命周期感知型组件能够允许app在前台时候更新网络数据,在app在后台时候自动暂停. 5、暂停和重启动画 最后附上最新依赖路径(
LiveData 与 Lifecycle 集成 LiveData 是用于在组件之间共享数据的组件,而它的数据变化与组件的生命周期紧密相连。...ViewModel 与 Lifecycle 集成 ViewModel 是用于在组件配置变化(如屏幕旋转)时保持数据的组件。...这样,你可以将生命周期感知的能力赋予任何类,并在其生命周期内执行相应的操作。...总结来说,通过自定义实现 Lifecycle 和 LifecycleObserver,我们可以将生命周期感知的能力赋予任何类,并在其生命周期内执行特定的操作,从而实现自定义的生命周期管理。...我们了解了 LifecycleRegistry、LifecycleOwner 和 LifecycleObserver 之间的关系,以及如何高级使用 Lifecycle。
Lifecycle(生命周期) 在任何 GUI 编程中都是基石般的存在,Android 也不例外。 作为用户,在页面跳转,旋转屏幕,查看通知,切换应用等日常操作中,都期望获得流畅连贯的使用体验。...你的 ShitAVPlayer 作为基础组件提供给其他部门使用,当量级达到一定程度时,你没有办法保证每一个调用方都能合理且正确的处理生命周期,满地跑的内存泄漏一定少不了你的锅。 — 什么?...很显然,这是一个典型的观察者模式,LifecycleObserver 观察 LifecycleOwner 的生命周期变化。...Event 和 State 通力合作,使得第三方组件不仅可以感知生命周期变化,还可以随时随地获取当前的生命周期状态,游刃有余的解决各种生命周期问题。...赋予组件感知外部生命周期的能力,将繁琐的样板代码解耦到组件内部,解救臃肿的生命周期代码。防止发生不符合预期的生命周期情况。
而 Android Jetpack 提供了一系列的 lifecycle-aware component (具备生命周期感知能力的组件) 正好解决了这个问题,可以把这些和生命周期相关的逻辑迁移到需要这些生命周期的组件本身...LifecycleObserver LifecycleObserver 顾名思义是 Lifecycle 的监听者,也就是生命周期感知能力的获得者,我们可以在 Observer 中使用相应的注解方法来监听...中使用生命周期感知能力的组件,譬如 LiveData 等,我们这里暂且定义 ViewHolder 的生命周期和其所绑定的 View 的生命周期保持一致 —— view attach 到 view detach...,返回的 Lifecycle 可供其他具有生命周期感知能力的组件(LifecycleObserver 的实现者)监听 LifecycleRegistry LifecycleRegistry 这是一个生命周期注册器...使用 Architecture Component 实现 MVVM 的正确姿势 LiveData 非粘性消息的探索和尝试 手把手教你如何用 100 行代码实现一个有生命周期感知能力的 EventBus
生命周期感知组件可以感知其他组件的生命周期,例如 Activity,Fragment等,以便于在组件的生命周期状态变化时做出相应的操作。...支持生命感知的组件可以帮你更好的组织代码,让你的代码更轻,更好维护。 对于需要响应生命周期变化的组件,我们通常是在 Activity 和 Fragment 的生命周期方法里实现一些操作。...生命周期感知组件的用例 生命周期感知组件可以让你在各种情况下都很好的管理生命周期,例如: 在粗略和细粒度的位置更新之间切换。...使用生命周期感知组件在应用可见时启用细粒度的位置更新,在应用处于后台时切换到粗粒度的更新。 停止和开启视频缓冲。 使用支持生命周期的组件尽快开始视频缓冲,但是将播放推迟到应用程序完全启动。...还可以使用可识别生命周期的组件在应用程序销毁时终止缓冲。 启动和停止网络连接。 使用可感知生命周期的组件可以在应用程序处于前台状态时实时更新(流式传输)网络数据,并在应用程序进入后台时自动暂停。
上期文章我们讲解了LiveData,知道它是一个可观察容器同时具备生命感知能力。那么它的生命感知能力又是如何实现呢?在使用LiveData进行注册observer时,是否记得其中的两个参数。...如果不遵循他们的生命周期,将会很容易导致内存泄露问题。所以如果我们能够实现生命感知能力的话,将会帮助我们更好的管理与生命周期有关的逻辑,而Lifecycle就是这样一个组件。...Lifecycle Lifecycle可以为界面/非界面组件添加生命周期状态感知,允许观察者去监听这些生命状态。Lifecycle主要通过两个枚举来追踪生命状态。...所以结合LifecycleObserver、LifecycleOwner与LifecycleRegistry,我们可以为任意非生命感知的组件实现生命感知能力,这样一来就能更好的帮助我们对组件的生命周期进行管理...通过LiveData与Lifecycle的运用,我们看到了Lifecycle的灵活性与它的强大生命感知能力,这样我们就可以为任意一个自定义组件或者其他的数据容器来实现生命感知能力。
Lifecycle生命周期感知型组件,用来执行、操作、响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。...(如何使用Lifecycle监听前后台的能力) Lifecycle从源码角度,简述Lifecycle的注册,派发,感知的过程 什么嵌套事件?发生的时机?Lifecycle是如何解决的?...因为下面的源码分析,还会有更多延伸的问题. Lifecycle基本使用 作为生命周期感知组件、它的作用就是监听宿主Activity/Fragment,然后派发给观察者。...现在来看后半部分,如何注册Observer后可以在任何时机(onDestory除外),感知完整生命周期。...因为所有观察者和宿主的状态是完全相同的,一旦生命周期派发,或是新的观察者添加进来时,如果生命周期或观察者集合元素发生变化,就可能会导致不同步。这错乱不是来自多线程。因为细心的你会发现。
2.1 Lifecycle之前 官方文档有个例子 来说明使用Lifecycle之前是如何生命周期管理的: 假设我们有一个在屏幕上显示设备位置的 Activity。...当Lifecycle的生命周期发生变化时,MyObserver就可以感知到。 MyObserver是如何使用生命周期的呢?...当Activity生命周期发生变化时,MyPresenter就可以感知并执行方法,不需要在MainActivity的多个生命周期方法中调用MyPresenter的方法了。...所有方法调用操作都由组件本身管理:Presenter类自动感知生命周期,如果需要在其他的Activity/Fragment也使用这个Presenter,只需添加其为观察者即可。...NonNull Lifecycle.Event event);} 也就说,LifecycleEventObserver 给 LifecycleObserver 增加了感知生命周期状态变化的能力。
Lifecycles 简介 Lifecycles 即生命周期,属于 Jetpack 架构组件之一的 Lifecycles 组件是可以为其它组件提供生命周期感知能力的一个组件,而具备了生命周期感知能力的组件就叫生命周期感知组件...我们知道四大基础组件有生命周期,能感知这些生命周期的组件就具备了生命周期感知能力,所以我认为以前我们使用的 MVP 模式中的 Presenter 如果它通过接口等方式间接获得了 Activity 的生命周期...,它也算是一个生命周期感知组件,但是这种获取生命周期的方式和 Lifecycles 比起来还是太 low 了,我们接着对比传统生命周期感知方式,聊一聊为什么使用 Lifecycles 组件 为什么需要...用例 在高精度和低精度的定位模式之间切换,使用生命周期感知组件可以让你的 App 在可见状态下使用高精度定位,当 App 处于后台的情况下切换到低精度定位,LiveData 是一个生命周期感知组件,允许你的应用在用户更改位置时自动更新...使用生命周期感知组件尽快启动视频缓冲,但推迟播放直到应用程序完全启动。您还可以使用生命周期感知组件在销毁应用程序时终止缓冲 启动和停止网络连接。
的概念与作用 Lifecycle是Jetpack组件库中的一个生命周期感知型组件,它可以执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。...Lifecycle的核心功能是将组件的生命周期状态通知给观察者,观察者可以根据这些状态变化来执行相应的操作。...开发者可以通过实现这个接口来监听组件的生命周期变化。...开发人员可以通过实现LifecycleObserver接口来监听LifecycleOwner的生命周期状态变化 public interface LifecycleObserver Lifecycle...在使用LifecycleObserver时,需要在组件的生命周期内注册和解除注册LifecycleObserver。否则,LifecycleObserver将无法收到组件的生命周期状态变化的通知。
Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity 、Fragment)生命周期(lifecycle-aware...前面说了,Lifecycle能够让开发者构建能感知其他组件(主要指Activity 、Fragment)生命周期(lifecycle-aware)的类。...划重点,**让开发者构建能感知其他组件(主要指Activity 、Fragment)生命周期(lifecycle-aware)的类。...既然这个ReportFragment能够感知Activity的生命周期,那么它是不是就是负责将生命周期事件分发给LifecycleObserver的呢?...疑点2:为什么用ReportFragment分发生命周期而不直接使用ActivityLifecycleCallbacks的回调来处理Lifecycle生命周期的变化?
2.1 Lifecycle之前 官方文档有个例子 来说明使用Lifecycle之前是如何生命周期管理的: 假设我们有一个在屏幕上显示设备位置的 Activity。...当Lifecycle的生命周期发生变化时,MyObserver就可以感知到。 MyObserver是如何使用生命周期的呢?...当Activity生命周期发生变化时,MyPresenter就可以感知并执行方法,不需要在MainActivity的多个生命周期方法中调用MyPresenter的方法了。...所有方法调用操作都由组件本身管理:Presenter类自动感知生命周期,如果需要在其他的Activity/Fragment也使用这个Presenter,只需添加其为观察者即可。...NonNull Lifecycle.Event event); } 也就说,LifecycleEventObserver 给 LifecycleObserver 增加了感知生命周期状态变化的能力。
它具有以下特点: 数据可以被观察者订阅; 能够感知组件(Fragment、Activity、Service)的生命周期; 只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新...2.减少内存泄漏 这是因为LiveData能够感知到组件的生命周期,当组件处于DESTROYED状态时,观察者对象会被清除掉。...4.不需要额外的手动处理来响应生命周期的变化 这一点同样是因为LiveData能够感知组件的生命周期,所以就完全不需要在代码中告诉LiveData组件的生命周期状态。...6.针对configuration change时,不需要额外的处理来保存数据 我们知道,当你把数据存储在组件中时,当configuration change(比如语言、屏幕方向变化)时,组件会被recreate...LiveDataBus具有生命周期感知 LiveDataBus具有生命周期感知,在Android系统中使用调用者不需要调用反注册,相比EventBus和RxBus使用更为方便,并且没有内存泄漏风险。
Lifecycle源码分析 目录介绍 01.Lifecycle的作用是什么 02.Lifecycle的简单使用 03.Lifecycle的使用场景 04.如何实现生命周期感知 05.注解方法如何被调用...充分利用了生命周期感知功能,可以在activities, fragments, 或者 services生命周期是活跃状态时更新这些组件。...还可以使用可识别生命周期的组件在应用程序销毁时终止缓冲。 启动和停止网络连接 使用可感知生命周期的组件可以在应用程序处于前台状态时实时更新(流式传输)网络数据,并在应用程序进入后台时自动暂停。...暂停和恢复动画绘制 当应用程序在后台运行时,使用生命周期感知组件处理暂停动画绘制,并在应用程序在前台运行后恢复绘制。...04.如何实现生命周期感知 看到上面的简单案例,可以发现使用了注解@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)标注的方法,既可以执行生命周期的监听。
充分利用了生命周期感知功能,可以在activities, fragments, 或者 services生命周期是活跃状态时更新这些组件。...感知生命周期 和其他可被观察的类不同的是,LiveData是有生命周期感知能力的,这意味着它可以在activities, fragments, 或者 services生命周期是活跃状态时更新这些组件。...不需要再解决生命周期带来的问题 LiveData可以感知被绑定的组件的生命周期,只有在活跃状态才会通知数据变化。...如果横竖屏切换(configuration change)时,不需要额外的处理来保存数据,当屏幕方向变化时,组件会被recreate,然而系统并不能保证你的数据能够被恢复的。...6.2 然后思考一些问题 a.liveData如何实现订阅者模式,如何处理发送事件? b.如何做到感知生命周期的,怎么跟 LifecycleOwner 进行绑定的?
2.几个重要的类和接口 1.Lifecycle Lifecycle是一个持有组件生命周期状态(如Activity或Fragment)的信息的类,并允许其他对象观察此状态。...两种实现方式: 1)实现DefultLifecyceObserver接口,然后重写里面生命周期方法; 2)直接实现LifecycleObserver接口,然后通过注解的方式来接收生命周期的变化; Lifecycle.java...,正常我们自定义控件啊,或者做其他逻辑的类,是没有声明周期的,现在有了LifecycleObserver,我们可以让一个普通的类拥有感知声明周期变化的能力。...{ } 最后借用下官网的-生命周期感知组件的最佳实战 1.尽可能保持您的UI控制器(活动和片段)尽可能精简。...相反,ViewModel应调用相应的组件来获取数据,然后将结果提供给UI控制器。 4.使用dataBinding在视图和UI控制器之间保持干净的界面。
生命周期感知组件可以响应另一个组件生命周期的变化(例如Activity和Fragment的生命周期状态更改)。 这些(实现了Lifecycle的)组件可帮助你构建组织性更好、更轻、更易于维护的代码。...听起来很强大吧,先来来看看使用效果吧。...Lifecycle可以让开发者更专注地实现功能而非小心翼翼地做生命周期判断。 如何实现 首先,我们Lifecycle库引入到项目。...这样一来,订阅该lifecycle的观察者(比如前面的SafeObserver)就能接收到该lifecycle对应Activity(或Fragment)生命周期的回调了。...相关资料 本文Demo: LifecyclePractice 使用了Lifecycle的一个轻图文App: Now Lifecycle官方文档: Handling Lifecycles with Lifecycle-Aware
是属于Android Jetpack的一部分, 可以让组件自己管理生命周期的逻辑,避免每次调用时的繁琐步骤,用Lifecycle实现的组件可以实现生命周期的监听,数据变化的监听等功能。...components (能感知生命周期的组件) ViewModels (用于存储和UI关联的数据,不会随设备旋转销毁) LiveData (用于监听数据变化) Navigation (用于应用内导航,...如果组件能够感知到Activity或者Fragment的变化,那么就可以在组件内部追踪Activity或者Fragment的生命周期,将之前写在Activity或者Fragment里的代码写到组件的内部...LiveData 假设你的应用需要应用在前台的时候在地图上更新精细坐标,而程序进入后台只需要更新大致的位置(频率、精度不高的位置),那么使用LiveData可以在位置变化的时候自动更新UI 假设你在开发一款在线播放视频的应用...4、通过Listener结合LifecycleObserver可以将Activity或者Fragment中的生命周期管理的代码写到Listener内部,避免了每次调用时重复写管理生命周期方法的繁琐步骤。
,而了解 Lifecycle 也正是理解 JetPack 组件系列库生命感知设计的基础。...; LifecycleEventObserver 可以接受所有生命周期变化的接口; FullLifecycleObserver 用于监听生命周期变化的接口,提供了 onCreate()...---- 或者你有某个自定义View,想感知Fragment或者Act的生命周期,从而做一些事情,比如Banner组件等,与上面示例类似: 当然你也可以选择依赖:androidx.lifecycle...直接去看 Lifecycle 的源码,其实现方式如下: 总体设计如上所示,比较简单,就是观察者模式的接口模版: 使用者实现 LifecycleObserver 接口(),然后调用 addObserver...参阅 Android-使用生命周期感知型组件处理生命周期 关于我 我是 Petterp ,一个 Android工程师 ,如果本文对你有所帮助,欢迎点赞支持,你的支持是我持续创作的最大鼓励!
领取专属 10元无门槛券
手把手带您无忧上云