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

山东住房和城乡建设厅网站衡水专业网站建设公司

山东住房和城乡建设厅网站,衡水专业网站建设公司,免费可以看的软件大全下载,成都园林设计公司前提 阅读本文的前提是要了解观察者模式。本文没有讲述反射相关的内容,功能中有使用反射。 简介 监听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/759995/

相关文章:

  • 个人网站毕业设计作品毕节网站开发
  • 网站建设及免费网站建设是什么
  • 网站的服务与建设岗位职责wordpress实现聊天功能
  • 中高端网站开发电子商务网站 icp备案
  • 潍坊网站建设哪家好新品发布会流程
  • 云县网站建设 云县网wordpress 导航页面模板
  • 吉林省建设招标网站三门峡做网站公司
  • 苏州做i网站的wordpress添加表格
  • 新余网站建设找谁做整站排名优化公司
  • 企业网站的模块功能自带代理的浏览器
  • 港口建设申报网站下载学校网站模板
  • 银行需要网站开发人员吗saas微信小程序开发工具
  • 佳木斯做微网站东莞seo建站咨询
  • 商城用什么系统做网站html网站标题怎么做
  • 网站制作 企业网站建设哪家好wordpress注册用户可见
  • 网站在哪里全国十大跨境电商排名
  • 网站建设需要什么内容茶叶网站策划方案
  • 网站和小程序的区别东莞专业网站推广公司
  • 公司网站建设 wordpress百度搜索数据统计
  • 在哪找做调查赚钱的网站延吉市网站建设
  • 常州 网站建设wordpress微博登陆
  • 宣传型网站建设南京网站公司
  • 郑州大学现代远程教育 《网页设计与网站建设》个人主页关于网站集约化建设公函
  • 珠海网站建设公岳阳建站公司
  • 影视网站代理html5 网站模板 米
  • 最好的html5画廊显示质量html5的网站推荐系统网站开发
  • 洛阳制作网站的公司wordpress透明插件
  • 二元期货交易网站开发个人建设网站
  • 许昌市建设路小学网站电子商务的理解
  • 石家庄自助建站软件大连大家营销