临时补课 Fragment与 Activity 生命周期关系(有点小坑)

一看就懂

仔细观察会发现,与一些文章中所说的顺序不一样 比如下图:

可以看到实测activity 的onStart() 执行在 fragment 的 onAttach()之前。 so,why。

最后可以确定是Android.app.Fragment 与androidx.fragment.app.Fragment的区别。

同时,在调用方式上getSupportFragmentManager()和getFragmentManager() 也存在不同,

用上图所示启动后 生命周期也可以和图里的对应上了,

总结:Google爸爸都建议我们使用新的Fragment,所以面试的时候应该能吹吹逼 。感觉是个能值得注意的点。

更新一下 ChatGPT 的回答: 

Q:为什么getSupportFragmentManager()和getFragmentManager() 启动的 fragment 生命周期不一致

ChatGPT A:

在 Android 开发中,getSupportFragmentManager()getFragmentManager() 用于管理 Fragment,但它们的具体用法和适用场景有所不同,这也导致了启动 Fragment 时生命周期表现的不一致。下面我会详细解释这两者之间的差异以及为何会导致生命周期的不一致。

1. getFragmentManager()getSupportFragmentManager()

  • getFragmentManager()

    • 这是 Fragment 类的一个方法,用于获取与当前 Fragment 或 Activity 关联的 FragmentManager
    • 在 Android P(API 级别 28)之前,getFragmentManager() 被用于从 Activity 或 Fragment 中获取原生 FragmentManager
    • 从 Android 9.0 Pie (API 28) 开始,推荐使用 getSupportFragmentManager() 替代 getFragmentManager(),因为后者已经被废弃。
  • getSupportFragmentManager()

    • 这是 FragmentActivity(和它的子类如 AppCompatActivity)的一个方法,用于获取支持库中的 FragmentManager
    • getSupportFragmentManager() 是专门为了支持不同 Android 版本的兼容性而设计的,确保即使在较旧的设备上也能使用 Fragment 的新特性。
    • 这个方法属于 AndroidX 或早期的 Support Library,用于处理 Fragment 的生命周期和交互。

2. 生命周期不一致的原因

  • 生命周期管理

    • AndroidX 和 Support Library 中的 FragmentManager 实现了对 Fragment 生命周期的更精细控制。它们经过了优化,以提供更一致和可预测的生命周期事件,尤其是在配置更改(如屏幕旋转)和内存回收场景中。
    • 原生的 FragmentManager (即通过 getFragmentManager() 获取的)在早期的 Android 版本中对生命周期事件的管理不如 AndroidX 中的 FragmentManager 精细,可能导致生命周期事件在某些情况下触发不一致。
  • 兼容性和更新

    • AndroidX 库提供了跨 Android 版本的兼容性支持,而原生的 FragmentManager 可能在新旧版本之间存在差异,这种差异可能导致 Fragment 的行为和生命周期管理存在不一致。
    • 使用 getSupportFragmentManager() 意味着你的应用将利用最新的库进行构建,这些库通常包含修复、改进和新特性,而这些更新可能没有即时反映到原生 API 中。

结论

推荐使用 getSupportFragmentManager() 来管理 Fragment,特别是当你的应用需要支持不同版本的 Android 或者希望利用 AndroidX 提供的最新特性时。这不仅可以确保应用具有更好的兼容性和一致性,还能使得 Fragment 的生命周期管理更加可靠和预测。通过使用最新的 AndroidX 库,开发者可以减少因 Android 版本差异带来的问题,提升应用的整体质量和用户体验。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值