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

学校要求做网站沈阳市城乡建设局网站

学校要求做网站,沈阳市城乡建设局网站,wordpress浏览器插件,app download前提 阅读本文的前提是要了解观察者模式。本文没有讲述反射相关的内容,功能中有使用反射。 简介 监听Activity/Fragment的生命周期,使用观察者模式,Activity/Fragment是被观察者。 监听的生命周期有onCreate、onStart、onResume、onPause…

前提

阅读本文的前提是要了解观察者模式。本文没有讲述反射相关的内容,功能中有使用反射。

简介

监听Activity/Fragment的生命周期,使用观察者模式,Activity/Fragment是被观察者。

监听的生命周期有onCreate、onStart、onResume、onPause、onStop和onDestroy。

androidx的特有功能。

使用

创建观察者

实现LifecycleObserver接口,使用注解监听对应的生命周期。

或者实现DefaultLifecycleObserver接口,同Activity/Fragment对应的函数监听对应的生命周期,且持有LifecycleOwner对象,AppCompatActivity是LifecycleOwner的子类。

注解方式在新版本已被弃用,项目中一般使用该方法。

注册观察者

AppCompatActivity中的成员变量mLifecycleRegistry,通过getLifecycle()获取。

LifecycleRegistry类实现Lifecycle接口,使用Lifecycle接口的addObserver()函数注册观察者。

综上可知:

实现AppCompatActivity类的Activity,可以使用lifecycle.addObserver(观察者)来注册观察者。

Tips:

一般在Activity的onCreate中注册观察者。

如果在onResume中注册观察者,会执行onCreate、onStart和onResume。(具体原因在源码分析)

PS:被观察者通知观察者由LifeCycle库实现。

源码分析

注册观察者时做了什么?

存储观察者对象,以及观察者类的class信息,回调生命周期对应函数时使用反射调用对应函数。

Lifecycle的实现类是LifecycleRegistry。

来分析下LifecycleRegistry的addObserver函数。

如何在Activity的生命周期被触发时调用观察者的对应函数?

如何获取Activity的生命周期?

核心实现在ReportFragment类的injectIfNeededIn方法中。

具体怎么做的?

ReportFragment是一个Fragment。

API=29的实现方式不同。

API版本

ReportFragment监听到Activity生命周期后,会调用ReportFragment的dispatch来调用观察者的对应函数。

API>=29时,是给Activity类添加回调,然后在Activity分发生命周期方法onCreate、onResume等时同时触发回调对应的方法。

向Activity类的成员变量mActivityLifecycleCallbacks添加一个LifecycleCallbacks对象,本质就是回调。

那么Activity是怎么将生命周期回调至LifecycleCallbacks对象呢?(以分析下onCreate为例)。

是在AMS分发Activty生命周期的时候处理的。AMS调用Activity的onCreate的函数是在performCreate中分发的。

不同版本分发的具体实现,都是通过ReportFragment的dispath函数来实现的。

dispath函数如何分发给观察者?

在分发的过程中没有直接使用对应的事件分发,在中间进行了事件和状态的转变处理,目的是为了灵活,在其他库使用Lifecycle时可以根据状态进行相应的处理。

例如:LiveData库会根据状态判断是否通知UI刷新。

事件有:

状态有:

事件与状态的关系如下图:

通过状态决定要执行什么事件(状态驱动事件)。

Lifecycle和观察者的状态是分别存储的,通过对比新旧状态,决定要执行什么事件。

状态的对比是通过枚举类型的数据进行大小对比来进行的。

为什么在onResume中注册,会执行onCreate、onStart和onResume?

onCreate、onStart和onResume01都是在回调onResume时触发的。

原因是在同步观察者状态时,是根据状态一步一步触发的。

循环过程如下图:

http://www.yayakq.cn/news/198492/

相关文章:

  • 构建大型网站株洲公司dedecms
  • 网站开发的理解2345网址导航网址
  • 有什么网站可以做3d标题优化
  • 电商营销型网站建设在线做任务的网站有哪些
  • 哪里有网站开发企业网络营销app有哪些
  • 抖音代运营需要什么资质关键词优化除了做网站还有什么方法
  • 机械设计网站推荐关键词排名优化工具
  • 搭建论坛网站的流程哈尔滨工程招标信息网
  • ppt模板免费下载完整版免费网站我国网站建设的不足
  • 有没有做牛羊角的网站直播网站建设项目策划书
  • 网站开发图片wordpress 免费吗
  • 做购物类网站有哪些温州网站建设报价
  • 做云购网站长沙好的seo外包公司
  • 行政还要负责网站建设新媒体吗1688黄页大全进口
  • 广东企业网站建设报价自己做网站的给微信取个什么名字好
  • 双滦网站建设wordpress任意文件删除
  • 微信官方网站建设oracle自带网站开发
  • html网站怎么做的网站开发与建设个人总结
  • 男女朋友在一起做那个的网站广西桂林旅游必去十大景点
  • 网站关键字优化软件apple网站模板
  • 做网站要有策划么钢铁网站哪家做的好
  • 专业网站建设咨询杭州网站建设的企业
  • 怎么看网站是什么程序怎么做阿里巴巴国际网站首页
  • 昆明建设局官方网站如何做超一个电子商务网站
  • 石家庄免费做网站文档下载网站 建设
  • 上海企业网站制作多少钱如何做淘宝二手网站
  • 微信公众号关联网站wordpress网盘搜索
  • 响应式网站算几个页面兰州网站推
  • 大型搬家门户网站源码网站管理与建设
  • 长春电商网站建设公司电话泰安网站的建设