背负青天而莫之夭阏者,而后乃今将图南。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 互联网 > 技术教程 > 正文

LifeCycle详解

swdejp 2024-04-19 17 浏览 0 评论

LifeCycle的由来

解耦是为了解决传统开发某块臃肿,以达到代码量平衡、优雅、易扩展。由于Android大部分开发需要感知组件的生命周期,在对应生命周期中做对应的工作,故原始的做法就是在Activity、Fragment、Service等生命周期回调中增加相应的处理代码,这样导致Activity等组件十分臃肿、难以做扩展。LifeCycle的出现就是在外面实现对这些组件生命周期的感知能力,减少组件中的代码量。

LifeCycle的使用

在Activity、Fragment中的使用

简单新建一个生命周期感知监听器,如下图,该类需要实现LifecycleObserver接口

首先在Activity中使用该接口,使用非常简单,只要两行代码就够了

下面就是见证奇迹的时候,这样解耦就完成了

在Fragment里面实现也非常简单,只用在Fragment里面做Activity同样的工作

在Service中的使用

service中使用非常简单,纯了添加LifeCycleExampleListener监听器外,Service需要继承LifecycleService

Application中的使用

application中使用非常简单,不过LifeCycleExampleListener是添加到全局的ProcessLifecycleOwner里面,这样就可以很方便的感知应用进程在前台还是后台了

LifeCycle原理

现以Application为例,其实里面所有的原理都是一样,ProcessLifecycleOwner.get().getLifecycle().addObserver最终实现类为LifecycleRegistry,addObserver方法如下

new ObserverWithState(observer, initialState)->Lifecycling.lifecycleEventObserver(observer),如下图所示,其实就是根据不同Observer的实现方式做适配,当为图1注解时,会动态生成对应的回调方法

后面最重要的是生命周期状态改变事件的分发statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState)),这样就实现了初始状态的监听,那Application生命周期改变是如何通知这些观察者的呢?主要的实现在ProcessLifecycleOwner类,其中生命周期感应在attachapp.registerActivityLifecycleCallbacks(接口中感应,当有activity启动时执行activityStarted->mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)->moveToState(next)->sync()

sync()代码如下,经过backwardPass或者forwardPass将生命周期事件传递给观测者,两个方法里面都是通过observer.dispatchEvent(l)实现

这样,LifeCycle就实现了动态感知生命周期,且不会造成内存泄漏,因为LifecycleRegistry都是弱引用LifecycleRegistry(包括Activity、Fragment、Service等)

相关推荐

微软决定在2022年6月15日彻底结束IE浏览器使命

作者:JiangSheng链接:https://www.zhihu.com/question/460468482/answer/1899710176来源:知乎著作权归作者所有。商业转载请联系作者获得...

Win10企业模式升级:Edge与IE11相处更融洽

IT之家讯当我们在Win10Edge浏览器中访问一些过时或者说不太符合最新标准的站点时,会出现“需要使用IE打开”的提示,点击按钮可切换至IE浏览器。为了让企业或者有特殊需要的用户更方便地设置哪些网...

微软大声疾呼:IE不是浏览器 请大家别用了

新浪科技讯北京时间2月9日下午消息,IE是不是浏览器?按照微软(105.67,0.40,0.38%)的说法已经不是了。到了今天,有些企业遗留站点还没有为现代浏览器升级,IE只是针对这些遗留站点的...

监控录像机常见问题解答:IE登陆失败

监控录像机常见问题解答:IE登陆失败Web控件加载失败:1,点击重新安装控件,控件安装过程中,关闭浏览器。2,控件安装和加载过程中,关闭防火墙和杀毒软件。3,打开IE浏览器,[工具>Intern...

在微软Edge浏览器中使用IE兼容模式的方法

目前,微软对IE的支持将逐步减少,将浏览器的重心转移到了Edge上,并且在windows11中已经无法单独运行IE浏览器了,网上虽然有通过替换某个dll文件以解决此问题,但两个浏览器来回使用多少也有...

微软 Edge 浏览器 IE 模式标签页出现卡死情况,已回滚更新修复

IT之家6月26日消息,微软在本月终止了对InternetExplorer11的支持,并建议用户使用Edge浏览器的InternetExplorer(IE)兼容模式浏览网页。然...

支付宝银行页面打不开怎么办

支付宝银行页面打不开的解决方法如下:1、使用IE浏览器。点击IE的菜单【工具】——【Internet选项】——【安全】,将安全中的各项设置恢复到默认级别。2、打开IE浏览器的工具栏——Internet...

微软推出新版Edge:便利和遗憾并存,你准备好升级了吗?

在经过长时间的测试之后,微软今天正式推出了基于Chromium内核的新一代Edge浏览器,以快速、安全和高效作为卖点,安装后会直接替代Windows10自带的老Edge组件。经过简单试用之后我发现它...

IE报错 禁用增强保护模式并运行运行该控件

公司一个比较老的系统,必须使用IE11浏览器打开才能正常使用。但是最近一直报错“这个网页想要运行与InternetExplorer的增强安全功能不兼容的"XXXX"。如果你信任此站点...

IDM下载器:站点抓取相关设置介绍

InternetDownloadManager(简称IDM)是一款十分好用资源下载器,它的站点抓取功能不仅可以下载被过滤器指定所需文件,例如一个站点的所有图片,或者一个站点的所有音频,也可以下载站...

方便实用,Win10系统开始菜单添加常用网站

在我们使用电脑时,大都会使用快捷操作,让我们工作效率得到提升。在日常工作中,我们会查找一些资料,百度到有用的信息会Ctrl+C复制然后Ctrl+粘贴下来,平时使用浏览器我们都喜欢将常用网站添加到浏览器...

遇到找不到服务器和dns错误的情况,你可以这样做

在上网的时候,突然提示“找不到服务器或DNS错误”,这究竟是怎么回事?相信很多人都遇到过这种情况,其实,解决这个问题并不复杂,排除故障找到问题,然后解决即可。下面我们来看看,遇到找不到服务器和dns错...

微软11月补丁日:IE浏览器有哪些变化?

微软11月补丁日:IE浏览器有哪些变化?出处:IT之家原创(阿华)2014-11-1215:11:59评论IT之家讯:11月微软补丁日,适用于Win7、Win8和Win8.1、Win10系统的1...

怎么添加受信任的站点

有一些安全度较高的网站要求在浏览器中添加受信任的站点才能允许访问,那么今天就一起来看一下如何在IE浏览器中添加受信任的站点。1.打开IE浏览器打开百度APP看高清图片2.在右上角点击“小齿轮”打开...

用脚本更改注册表设置IE受信任站点的自定义选项

用脚本更改注册表设置IE受信任站点的自定义选项在企业中有一些内网网站或政府网站需要用IE浏览器,但是又经常会有一个地方需要设置,那么我们可以用脚本来设置一些我们知道的基本设置和统一设置。网站添加受信任...

取消回复欢迎 发表评论: