当前位置: 首页 > news >正文

做网站的为什么不给域名和密码个人网页制作与网站建设

做网站的为什么不给域名和密码,个人网页制作与网站建设,烟台seo网站诊断,网站系统建设技术服务费我们之前知道了lifecycle的奇妙之处,那么lifecycle为什么会如此奇妙?💭 前置知识 没有看过lifecyce基础的可以看这篇文章: jetpack之lifecycle的入门使用[特殊字符]https://blog.csdn.net/i_xiang_la_shi/article/details/1471…

我们之前知道了lifecycle的奇妙之处,那么lifecycle为什么会如此奇妙?💭

前置知识

没有看过lifecyce基础的可以看这篇文章:

jetpack之lifecycle的入门使用[特殊字符]https://blog.csdn.net/i_xiang_la_shi/article/details/147167228了解过上面的文章,我们就能够知道lifecycle中有几个类:LifecycleOwnerLifecycleObserver

核心组件

其实这两个类就是lifecycle的两个核心组件,除了这两个,还有一个我们在使用的时候看不到的大能:LifecycleRegistry。

所以,构成lifecyc的核心组件有:LifecycleOwner、LifecycleObserver以及LifecycleRegistry。

LifecycleOwner——生命周期持有者

我们先看看熟悉的lifecycleowner的源码吧:

public interface LifecycleOwner {/*** Returns the Lifecycle of the provider.** @return The lifecycle of the provider.*/public val lifecycle: Lifecycle
}

上面的代码很简单,lifecycowner的接口的内容也很少,就只有一个lifecycle的对象。

实现了LifecycleOwner的类都是具有生命周期的例如AppcompatActivity以及Fragment。

在此就拿Fragment的源码做说明:

在如上的图片中我们可以看到Fragment实现了LifecycleOwner。这样,我们就能够为Fragment组件来添加观察者了。😋

LifecycleRegistry——生命周期的注册中心

先说一下它的作用:

  • 管理 LifecycleOwner 的生命周期状态(如 CREATEDRESUMED)。
  • 维护观察者列表,并在状态变化时通知所有注册的 LifecycleObserver

它的重要程度可见一斑,我们来分析一下它的源码:

open class LifecycleRegistry private constructor(provider: LifecycleOwner,private val enforceMainThread: Boolean
) : Lifecycle() {
//...
}

我们可以看到,它实现了抽象类Lifecycle。其实在LifecycleOwner中的Licycle实例一般都是LifecycleRegistry。

那么他是如何管理LifecycleOwner的生命周期状态的?

public enum class State {/*** Destroyed state for a LifecycleOwner. After this event, this Lifecycle will not dispatch* any more events. For instance, for an [android.app.Activity], this state is reached* **right before** Activity's [onDestroy][android.app.Activity.onDestroy] call.*/DESTROYED,/*** Initialized state for a LifecycleOwner. For an [android.app.Activity], this is* the state when it is constructed but has not received* [onCreate][android.app.Activity.onCreate] yet.*/INITIALIZED,/*** Created state for a LifecycleOwner. For an [android.app.Activity], this state* is reached in two cases:**  * after [onCreate][android.app.Activity.onCreate] call;*  * **right before** [onStop][android.app.Activity.onStop] call.**/CREATED,/*** Started state for a LifecycleOwner. For an [android.app.Activity], this state* is reached in two cases:**  * after [onStart][android.app.Activity.onStart] call;*  * **right before** [onPause][android.app.Activity.onPause] call.**/STARTED,/*** Resumed state for a LifecycleOwner. For an [android.app.Activity], this state* is reached after [onResume][android.app.Activity.onResume] is called.*/RESUMED;
    @MainThread@Deprecated("Override [currentState].")open fun markState(state: State) {enforceMainThreadIfNeeded("markState")currentState = state}

 在它的源码里面发现了markState的代码,在其中我们可以看到他有一个赋值方法,这小子藏着坏呢(〃>目<),其中的代码并不是直接将state这个状态赋值过去。

override var currentState: Stateget() = state/*** Moves the Lifecycle to the given state and dispatches necessary events to the observers.** @param state new state*/set(state) {enforceMainThreadIfNeeded("setCurrentState")moveToState(state)}

我们可以看到它的赋值是进入了一个moveToState方法:,这里我就只需要知道,这个方法是进行了时间分发,和state的更新即可。

如何实现第二个作用的?

override fun addObserver(observer: LifecycleObserver) {enforceMainThreadIfNeeded("addObserver")val initialState = if (state == State.DESTROYED) State.DESTROYED else State.INITIALIZEDval statefulObserver = ObserverWithState(observer, initialState)val previous = observerMap.putIfAbsent(observer, statefulObserver)if (previous != null) {return}val lifecycleOwner = lifecycleOwner.get()?: // it is null we should be destroyed. Fallback quicklyreturnval isReentrance = addingObserverCounter != 0 || handlingEventvar targetState = calculateTargetState(observer)addingObserverCounter++while (statefulObserver.state < targetState && observerMap.contains(observer)) {pushParentState(statefulObserver.state)val event = Event.upFrom(statefulObserver.state)?: throw IllegalStateException("no event up from ${statefulObserver.state}")statefulObserver.dispatchEvent(lifecycleOwner, event)popParentState()// mState / subling may have been changed recalculatetargetState = calculateTargetState(observer)}if (!isReentrance) {// we do sync only on the top level.sync()}addingObserverCounter--}

这个方法相信大家都不陌生了。

它的作用就是LifecycleRegistry的第二个作用了——维护观察者列表,并在状态变化时通知所有注册的 LifecycleObserver。

LifecycleRegistry先解析到这里,接下来我们看LifecycleObserver:

LifecycleObserver——生命周期观察者

它的作用是:

监听生命周期事件(如 ON_CREATEON_RESUME),通过注解或接口实现回调

因为在上面的LifecycleRegitry中我们知道了只有注册了观察者我们才能够让lifecycle感知到此组件(指的是添加了观察者的组件)的生命周期变化,这里,我就不贴源码了。😋

运作流程​

​1. 观察者注册​
  • 通过 lifecycle.addObserver() 注册观察者。
  • LifecycleRegistry 内部维护 ObserverWithState 列表,封装观察者及其当前状态。
​2. 事件分发​
  • Activity 生命周期方法(如 onCreate())被调用时,LifecycleRegistry 通过 handleLifecycleEvent() 更新状态并遍历观察者列表,调用其对应的回调方法。
  • ​线程安全​​:强制在主线程执行状态更新(enforceMainThreadIfNeeded方法),避免并发问题。
​3. 状态同步​
  • 新注册的观察者会立即收到当前状态的同步事件(如注册时 Activity 已处于 RESUMED 状态,则触发 ON_CREATEON_STARTON_RESUME 回调)。

如果觉得主包讲得好,给主包一个大大的关注吧😚。

http://www.dtcms.com/a/602316.html

相关文章:

  • GIT基础使用教程
  • 想建设个人网站去那里建设宁德做网站的公司
  • wordpress网站seo专业展馆展厅设计
  • LangGraph智能知识库系统架构设计方案 - 多agent架构
  • 在线C语言编译 | 提供便捷高效的在线编程环境
  • 二级网站建设费用网站有备案号吗
  • 搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
  • flutter项目老是卡在Running Gradle task ‘assembleRelease‘......
  • 东莞清溪镇做网站公司对网站有效的优化软件
  • Python的asyncio核心组件
  • 建立网站要多少钱销售平台有哪些
  • 诸暨公司做网站免费项目进度管理软件
  • leetcode:逆波兰表达式求值
  • sql中left join和inner join的区别
  • 最小栈--leetcode
  • 做网站的学什么代码wordpress 主题末班
  • 网站建设二公司psd转wordpress主题
  • 线性代数 - 3 阶方阵的行列式 可视化
  • 营销型网站首页模板做纺织生意用什么网站好
  • flink部署选型方案以及flink-on-k8s部署
  • 3GPP标准各个版本的介绍和演变
  • 网站设置的参数江西建设厅网站查询施工员
  • 程序员个人网站开发模板之家网页模板
  • 彭阳网站建设多少钱做网站怎么发展客户
  • 做软件项目的网站百度制作企业网站多少钱
  • 大型电商网站建设武平县网站建设
  • seo01网站营销推广软件有哪些
  • 建设银行网站信息补充网站建设app端
  • 结合 Leetcode 题探究KMP算法
  • Vue3 VueUse(组合式 API 工具库)