icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础内容

  • AndroidCore

  • Android UI

  • Components

  • Fragment

    • Fragment概述
    • Fragment生命周期
      • 1. Fragment的状态
        • 运行状态
        • 暂停状态
        • 停止状态
        • 销毁状态
      • 2. Fragment的回调
      • 3. 回调测试
        • 添加Fragment对象显示
        • Home回到桌面
        • 回到应用
        • replace Fragment02
        • remove
        • Fragment02 返回 Fragment01
        • 退出应用
    • Fragment与Activity的交互
    • Fragment你应该明白的一些疑难点
  • 网络操作

  • 异步机制

  • 数据存储

  • 学习笔记

  • 自定义View

  • View事件体系

  • Android
  • Fragment
iqqcode
2021-06-02
目录

Fragment生命周期

# 1. Fragment的状态

Fragment必须嵌入到Activity中使用,Fragment生命周期直接受到所在Activity的影响。

  • 当Activity暂停,它拥有的Fragment都暂停
  • Activity被销毁,它拥有的Fragment都销毁

# 运行状态

当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。

# 暂停状态

当一个Activity进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态,Fragment所关联的Activity处于暂停,则该Fragment也处于暂停

# 停止状态

当一个Activity进入停止状态时,与它相关联的碎片就会进入到停止状态;或者通过调用FragmentTransaction的remove() 、replace() 方法将碎片从活动中移除,但如果在事务提交之前调用addToBackStack() 方法,这时的碎片也会进入到停止状态。

总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。

# 销毁状态

Fragment总是依附于Activity而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction的remove() 、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态(调用进入停止状态)。

# 2. Fragment的回调

Fragment概述与生命周期

onAttach() 当Fragment与Activity发生关联时调用

onCreateView() 创建该Fragment的视图(加载布局)时调用

onViewCreated()

onActivityCreated() 确保与碎片相关联的活动一定已经创建完毕的时候调用,当Activity的onCreate方法返回时调用

onStart()

onResume()

onPause()

onStop()

onDestroyView() 与onCreateView相对应,当该Fragment的视图被移除时调用

onDestroy()

onDetach() 与onAttach相对应,当Fragment与Activity关联被取消时调用


(1)、Fragment在Activity中replace

新替换的Fragment:onAttach-->onCreate-->onCreateView-->onViewCreated-->onActivityCreated-->onStart-->onResume

被替换的Fragment:onPause-->onStop-->onDestroyView-->onDestroy-->onDestach

(2)、Fragment在Activity中replace并addToBackStack

新替换的Fragment(没有在BackStack中):onAttach-->onCreate-->onCreateView-->onViewCreated-->onActivityCreated-->onStart-->onResume

新替换的Fragment(在BackStack中):onCreateView-->onViewCreated-->onActivityCreated-->onStart-->onResume

被替换的Fragment:onPause-->onStop-->onDestroyView

(3)、Fragment在上述情况下进入onResume后,则进入了运行状态,以下四个生命周期将跟随所属的Activity一起调用:

onPause > onStop > onStart > onResume

13、Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用?

Fragment调用startActivityForResult--->HostCallbacks.onStartActivityFromFragment--->Fragment.startActivityFromFragment。

14、如何实现Fragment的滑动?

ViewPager嵌套Fragment即可实现滑动。

15、fragment之间传递数据的方式?

(1)、在创建的Fragment添加tag,使用bundle传值。

(2)、使用接口回调传值。

(3)、使用开源的EventBus传值。

作者:上善若水0819 链接:https://www.jianshu.com/p/79bf744ab4b2 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

# 3. 回调测试

0_Hn8BejsOaQeNFoRa

# 添加Fragment对象显示

top.iqqcode.fragmentlife04 E/TAG: onAttach ---> 01
top.iqqcode.fragmentlife04 E/TAG: onCreate ---> 02
top.iqqcode.fragmentlife04 E/TAG: onCreateView ---> 03
top.iqqcode.fragmentlife04 E/TAG: onActivityCreated ---> 04
top.iqqcode.fragmentlife04 E/TAG: onStart ---> 05
top.iqqcode.fragmentlife04 E/TAG: onResume ---> 06
1
2
3
4
5
6

# Home回到桌面

top.iqqcode.fragmentlife04 E/TAG: onPause ---> 07
top.iqqcode.fragmentlife04 E/TAG: onStop ---> 08
1
2

# 回到应用

top.iqqcode.fragmentlife04 E/TAG: onStart ---> 05
top.iqqcode.fragmentlife04 E/TAG: onResume ---> 06
1
2

# replace Fragment02

top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onAttach ---> 01
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onCreate ---> 02
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onCreateView ---> 03
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onActivityCreated ---> 04
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onStart ---> 05
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onResume ---> 06
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onPause ---> 07
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onStop ---> 08
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onDestroyView ---> 09
1
2
3
4
5
6
7
8
9

# remove

top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onPause ---> 07
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onStop ---> 08
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onDestroyView ---> 09
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onDestroy ---> 10
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onDetach ---> 11
1
2
3
4
5

# Fragment02 返回 Fragment01

top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onCreateView ---> 03
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onActivityCreated ---> 04
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onStart ---> 05
top.iqqcode.fragmentlife04 E/TAG: Fragment01 == onResume ---> 06
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onPause ---> 07
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onStop ---> 08
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onDestroyView ---> 09
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onDestroy ---> 10
top.iqqcode.fragmentlife04 E/TAG: Fragment02 == onDetach ---> 11
1
2
3
4
5
6
7
8
9

# 退出应用

top.iqqcode.fragmentlife04 E/TAG: onPause ---> 07
top.iqqcode.fragmentlife04 E/TAG: onStop ---> 08
top.iqqcode.fragmentlife04 E/TAG: onDestroyView ---> 09
top.iqqcode.fragmentlife04 E/TAG: onDestroy ---> 10
top.iqqcode.fragmentlife04 E/TAG: onDetach ---> 11
1
2
3
4
5

android-fragment-life-cycle

编辑 (opens new window)
上次更新: 2021/06/02, 10:01:48
Fragment概述
Fragment与Activity的交互

← Fragment概述 Fragment与Activity的交互→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×