Fragment 各种状态下的生命周期

来源:互联网 发布:淘宝店铺音乐要钱吗 编辑:程序博客网 时间:2024/06/07 00:40

Fragment 各种状态下的生命周期

  • Fragment 各种状态下的生命周期
    • 静态添加
      • 添加步骤
      • 生命周期
        • 初始化
          • Back键
        • 点击Home键
        • 多任务键返回
        • 点击Home被杀死
    • 动态添加
      • add remove replace
        • add
        • remove
        • replace
      • show hide
      • attach detach
        • attach
        • detach
    • 总结
    • 添加到 back stack
    • ViewPager
      • 添加到 FragmentPagerAdapter
      • 添加到 FragmentStatePagerAdapter
      • 总结

先扔出生命周期图

关于 Fragment 请参考官网

静态添加

添加步骤

在xml布局中使用 <fragment> 标签,在activity:name属性中添加对应Fragment
需要注意的是:
fragment 必须要有唯一标示 三者任选其一

  • android:id 属性
  • android:tag 属性
  • 如果没有则会自动选取 选取容器的id,如果容器也没有id 则会抛出RuntimeException

生命周期

初始化


Activity: onCreate
Fragment: onAttach
Fragment: onCreate
Fragment: onCreateView
Fragment: onAtivityCreated
Fragment: onStart
Activity: onStart
Activity: onResume
Fragment: onResume
可以看出 Fragment 是跟随setContentView 生成的

Back键


Fragment: onPause
Activity: onPause
Fragment: onStop
Activity: onStop
Fragment: onDestoryView
Fragment: onDestory
Fragment: onDestach
Activity: onDestory

点击Home键


Fragment: onPause
Activity: onPause
Fragment: onStop
Activity: onStop

多任务键返回


Activity: onRestart
Fragment: onSstart
Activity: onResume
Fragment: onResume

点击Home被杀死

重新走生命周期了,这个先不详细讨论

动态添加

通过代码将 Fragment 添加到现有的ViewGroup
通过 FragmentManager 管理 fragment
通过FragmentTransaction 事务提交的方式 add,remove,replace,show,hide,attach,detach

add remove replace

add


Fragment: onAttach
Fragment: onCreate
Fragment: onCreateView
Fragment: onActivityCreated
Fragment: onStart
Fragment: onResume

remove


Fragemnt: onPause
Fragment: onStop
Fragment: onDestoryView
Fragment: onDestory
Fragment: onDetach

replace

replace = add + remove
remove replace 方式会导致生命周期重启,所有用户数据会丢失

show & hide

不走生命周期,实例保存

attach & detach

attach


Fragment: onCreateView
Fragment: onActivityCreated
Fragment: onStart
Fragment: onResume
没有onCreate 方法

detach


Fragment: onPause
Fragment: onStop
Fragment: onDestoryView

总结

因为 add remove replace 都会重新走生命周期所以不需要保存用户状态就直接 使用 add removew replace 添加和替换就可以了
如果需要保存用户状态 用 show hide

添加到 back stack

当Fragment 添加到 back stack 中生命周期会受到影响

点击button添加到 back stack

Fragment: onAttach
Fragment: onCreate
Fragment: OnCreateView
Fragment: onActivityCreated
Fragment: onStart
replace addToBackStack
Fragment: onPause
Fragment: onStop
Fragment: onDestoryView
不会 onDestory onDetach


点击返回键
Fragment: onCreateView
Fragment: onActivityCreated
Fragment: onStart
Fragment: onResume
不会走 onAttach onCreated

ViewPager

添加到 FragmentPagerAdapter

一般使用ViewPager 使用 FragmentPagerAdapterFragmentPagerAdapter 使用 FragmentManager 管理Fragment,每个访问过的 Fragment 都会存在内存中
三个 Fragmetn 的例子
启动

fragment01 处于屏幕
切换

fragment02 处于屏幕
可以看出切换到中部三个 Fragment 都处于onResume状态
再切换
fragment03 处于屏幕

当第三个 fragment03 显示在屏幕上,第一个 fragment01 onDestoryView
再次切换
fragment02 处于屏幕

fragment01 处于 onResume 可以看出只是 执行 onCreateView -> onActivityCreated -> onStart -> onResume 没有执行 onAttach onCreate onCreateView

添加到 FragmentStatePagerAdapter

过程和 FragmentPagerAdapter 一样 看图吧

切换

切换

切换

总结

一般静态添加少量 FragmentFragmentPagerAdapter
动态大量添加 FragmentFragmentStatePagerAdapter
代码放在了 github

0 0