Fragment源码解析

本文对Fragment源码进行解析,从getFragmentManager()开始,分析了FragmentManagerImpl类。操作Fragment的方法在BackStackRecord类,add等操作是往List里addOp。commit()在FragmentManager里添加信息和操作到队列,通过Handler.post()执行,最终进入Fragment生命周期,由FragmentManager操控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fragment源码解析

我们在分析任何源码时都是从根开始追溯,那么我们在分析Fragment时就从getFragmentManager()开始

FragmentManager分析

接下来看FragmentManagerImpl类FragmentManagerImpl是继承FragmentManager的。

然后我们看到操作Fragment的方法都是在BackStackRecord这个类里面,继续跟踪BackStackRecord发现我们的add()、replace()、remove()、hide()、show()操作实际上都是往一个List里addOp(),只不过会在Op对象里标识是add是replace还是remove等

都是往list里add是不是我们以上的这些操作都得谨慎呢?那看来最根本的操作就靠commit()了,我们先来看commit()是怎么处理的

这里在FragmentManager里做了两件事,一是讲fragment信息添加到集合里;二是讲操作添加到操作队列里并执行任务。那么我们看具体怎么执行

这是通过Handler.post()消息通知执行

最后执行moveToState()进入Fragment生命周期,原来Fragment的生命周期全由FragmentManager操控着,并且Activity是它的间接操控者。

那么回到上面我们预留的问题:为什么各种操作都是add呢,到这里我们终于看见了,原来是在execPendingActions()中才统一处理

到此我们就把Fragment分析完了,那么会有些人问为什么没提及Fragment里面的代码?其实Fragment只是生命周期的延生,所以说Android的设计确实精妙。那么建议今后的开发过程中最好秉承Fragment只负责UI呈现,不做业务逻辑处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值