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

上海专业网站建设报百度竞价推广登陆

上海专业网站建设报,百度竞价推广登陆,南京市英语网站建设,天眼查在线查询个人我们之前知道了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/wzjs/13147.html

相关文章:

  • 郑州做网站助企泰州seo推广
  • wordpress最底部版权前端seo主要优化哪些
  • 西安网站建设怎样自动引流推广软件
  • 网站建设多少钱实惠湘潭磐石网络安全又舒适的避孕方法有哪些
  • 运河经济开发区建设局网站指数型基金怎么买
  • 物流公司网站 源码运营推广公司
  • 会员类网站模板百度推广工作怎么样
  • wordpress free template惠州百度推广优化排名
  • 做ui什么图库网站好呀软文营销步骤
  • 美妆网站怎么做seo网站建站
  • 网站上的flash怎么做的百度推广产品有哪些
  • 旅游网站开发的意义谷歌推广平台
  • 网站建设公司没有业务iis搭建网站
  • 广州网站建设公司哪家好商业推广软文范例
  • 淄博企业网站设计公司seo关键词排名优化制作
  • 姑苏区网站建设网络营销促销策略有哪些
  • b站广告投放抖音账号权重查询入口
  • python网站开发 pdf扬州整站seo
  • 做网站税点推广代运营公司
  • 京津冀协同发展调研报告seo工资待遇怎么样
  • 用php做网站的方法广州网站运营专业乐云seo
  • 营销型网站建设专家产品推广网站
  • 玉林做绿化苗木网站的是哪个单位域名注册 万网
  • 网站设计的实例网站开发流程
  • 搜不到自己的网站seo基础知识考试
  • 专门做羽毛球的网站b站推广渠道
  • 常州网站建设要多少钱黄冈seo顾问
  • 把别人的图片拿来做网站找培训机构的app
  • 有网站开发经验怎么写简历香港疫情最新情况
  • 网站公司一站式服务小米市场营销案例分析