Android fragment生命周期处理

添加项目到Action Bar

       你的fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单(以此类推, Action Bar也一样).为了使这个方法接收调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用).

       随后从fragment添加到Option菜单的任何项,都会被追加到现有菜单项的后面.当一个菜单项被选择, fragment也会接收到 对 onOptionsItemSelected() 的回调.也可以在你的fragment layout中通过调用 registerForContextMenu() 注册一个view来提供一个环境菜单.当用户打开环境菜单, fragment接收到一个对 onCreateContextMenu() 的调用.当用户选择一个项目, fragment接收到一个对onContextItemSelected() 的调用.

       注意: 尽管你的fragment会接收到它所添加的每一个菜单项被选择后的回调,  但实际上当用户选择一个菜单项时, activity会首先接收到对应的回调.如果activity的on-item-selected回调函数实现并没有处理被选中的项目, 然后事件才会被传递到fragment的回调.

       这个规则适用于选项菜单和环境菜单.

处理Fragment生命周期

        管理fragment的生命周期, 大多数地方和管理activity生命周期很像.和activity一样, fragment可以处于3种状态:
        Resumed
        在运行中的activity中fragment可见.
        Paused

       另一个activity处于前台并拥有焦点, 但是这个fragment所在的activity仍然可见(前台activity局部透明或者没有覆盖整个屏幕).

       Stopped
       要么是宿主activity已经被停止, 要么是fragment从activity被移除但被添加到后台堆栈中.

       停止状态的fragment仍然活着(所有状态和成员信息被系统保持着). 然而, 它对用户不再可见, 并且如果activity被干掉,他也会被干掉.

       仍然和activity一样, 你可以使用Bundle保持fragment的状态, 万一activity的进程被干掉,并且当activity被重新创建的时候, 你需要恢复fragment的状态时就可以用到. 你可以在fragment的 onSaveInstanceState() 期间保存状态, 并可以在 onCreate(), onCreateView() 或 onActivityCreated() 期间恢复它.

      生命周期方面activity和fragment之间最重要的区别是各自如何在它的后台堆栈中储存. 默认地, activity在停止后, 它会被放到一个由系统管理的用于保存activity的后台堆栈.(因此用户可以使用BACK按键导航回退到它).

      然而, 仅当你在一个事务期间移除fragment时,显式调用addToBackStack()请求保存实例时,才被放到一个由宿主activity管理的后台堆栈.

      另外, 管理fragment的生命周期和管理activity生命周期非常类似.因此, "managing the activity lifecycle"中的相同实践也同样适用于fragment. 你需要理解的是,  activity的生命如何影响fragment的生命.

与activity生命周期的协调工作
       fragment所生存的activity的生命周期,直接影响fragment的生命周期,每一个activity的生命周期的回调行为都会引起每一个fragment中类似的回调.

       例如,当activity接收到onPause()时,activity中的每一个fragment都会接收到onPause().

       Fragment 有一些额外的生命周期回调方法, 那些是处理与activity的唯一的交互,为了执行例如创建和销毁fragment的UI的动作. 这些额外的回调方法是:

onAttach()
当fragment被绑定到activity时被调用(Activity会被传入.).
onCreateView()
创建和fragment关联的view hierarchy时调用.
onActivityCreated()
当activity的onCreate()方法返回时被调用.
onDestroyView()
当和fragment关联的view hierarchy正在被移除时调用.
onDetach()
当fragment从activity解除关联时被调用.

       fragment生命周期的流程, 以及宿主activity对它的影响, 在图3中显示.在这个图中,可以看到activity依次的每个状态是如何决定fragment可能接收到的回调方法.例如, 当activity接收到它的onCreate(), activity中的fragment接收到最多是onActivityCreated().

       一旦activity到达了resumed状态, 你可以自由地在activity添加和移除fragment.因此,仅当activity处于resumed状态时, fragment的生命周期才可以独立变化.

      无论如何, 当activity离开resumed状态,fragment再次被activity的推入它自己的生命周期过程.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生命周期是指一个 Android Fragment 在其创建、活动状态和销毁过程中所经历的一系列事件和方法调用。 1. Fragment生命周期方法有以下几个: - onAttach():当 FragmentActivity 关联时调用。 - onCreate():在 Fragment 创建时调用。 - onCreateView():在创建 Fragment 的视图时调用。 - onViewCreated():在 Fragment 的视图已经创建后调用。 - onActivityCreated():在与 Fragment 相关联的 Activity 的 onCreate() 方法已经完成后调用。 - onStart():在 Fragment 可见时调用。 - onResume():在 Fragment 可交互(获取焦点)并可见时调用。 - onPause():当 Fragment 失去焦点但仍可见时调用。 - onStop():当 Fragment 不再可见时调用。 - onDestroyView():在 Fragment 的视图被销毁时调用。 - onDestroy():在 Fragment 销毁时调用。 - onDetach():当 FragmentActivity 解除关联时调用。 2. Fragment生命周期流程如下: - onAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onActivityCreated() - -> onStart() -> onResume() - -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach() 3. 在生命周期方法中,可以执行一些常见的操作: - onCreate():初始化一些数据或资源。 - onCreateView():创建并返回 Fragment 的布局视图。 - onViewCreated():对布局视图进行初始化操作。 - onStart():执行一些开始的任务或动画。 - onResume():注册监听器、开始耗时任务等。 - onPause():取消注册监听器、暂停耗时任务等。 - onStop():保存数据或状态等。 - onDestroyView():释放视图相关的资源。 - onDestroy():释放其他资源。 - onDetach():清理与 Activity 相关的引用。 这些生命周期方法与 Fragment 的状态转换和可见性变化相关,通过重写这些方法,可以在合适的时机执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值