Fragment生命周期

要创建一个Fragment,必须创建一个Fragment的子类(或其现有的子类)。 Fragment类的代码看起来很像Activity。 它包含类似于活动的回调方法,如onCreate(),onStart(),onPause()和onStop()。 事实上,如果要将现有的Android应用程序转换成使用Fragment,可以将代码从Activity的回调方法移至Fragment的相应回调方法中。

1.至少应该了解的Fragment生命周期

说明流程图
onAttach(Activity) 一旦该片段与其活动相关联就被调用(注意:在API 23被onAttach(Context)替代)

onCreate(Bundle) 被调用来做一个片段的初始创建

onCreateView(LayoutInflater, ViewGroup, Bundle) 创建并返回与Fragment关联的
视图层次结构,调用以使片段实例化其用户界面视图。这是可选的,非图形片段
可以返回null(这是默认实现)

onActivityCreated(Bundle) 当片段的活动已经创建并且该片段的视图层次被实例化
时调用。可以用来进行最终的初始化,比如检索视图或恢复状态

onStart() 使Fragment对用户可见(基于其包含的Activity正在启动)

onResume() 使片段开始与用户交互(基于其包含的Activty正在恢复)

onPause() Fragment不再与用户交互,因为其活动正在暂停或Fragment
的操作正在修改它所在的Activity。

onStop(): Fragment对用户不再可见,要么是因为其Activity正在停止,要么是
Fragment的操作正在修改它所在的Activity。

onDestroyView():Fragment清理与其View相关的资源。

onDestroy()当碎片不再使用时调用。最后清理片段所有状态。

onDetach(): Fragment解除与它所在Activity的关联。注意,如果在Activity重新创建
时保留片段实例(setRetainInstance(boolean)),那么它会在onStop()之后调用。
图片加载失败

注意,如果要重写以上方法,则必须调用超类实现。

2.Activity与Fragment生命周期对应关系

3.保留片段状态

实际上,还有两个Fragment生命周期常常调用的方法,是onViewStateRestored()和onSaveInstanceState(),它们分别收集Fragment的数据和可以取出储存的数据,onViewStateRestored的作用与Activity的onRestoreInstanceState()效果一致,并且会在onStart()之前,onActivityCreated()之后调用。Fragment所有保存的视图层次结构状态已被恢复。而onSaveInstanceState()对应Activity的onSaveInstanceState()方法,表示保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。而onSaveInstanceState()此方法可能在onDestroy()之前的任何时候被调用。
对于onSaveInstanceState(Bundle)储存的状态,如果以后需要创建片段的新实例,则放置在Bundle中的数据将在提供给onCreate(Bundle),onCreateView(LayoutInflater,ViewGroup,Bundle),onActivityCreated(Bundle),onViewStateRestored(Bundle savedInstanceState)的Bundle中可用,需要注意的是savedInstanceState可能为空)。下面给出一个简单的例子:

 private final String KEY = "一个定值";
    @Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        if(savedInstanceState!=null)
        Log.d(TAG, "onViewStateRestored: "+savedInstanceState.get(KEY));
        //恢复异常销毁前数据
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString(KEY,"这是在Fragment异常销毁前存储的一条消息");
    }

之下是打开应用,然后手机旋转屏幕一次后的打印结果(将之前所说所有回调都加了打印日志)
这里写图片描述

4.片段的三种生命状态

1.继续(在onResume()与onPause()之间)
片段在运行中的 Activity 中可见,此时可与用户交互。
2.暂停
另一个 Activity 位于前台并具有焦点,但此片段所在的 Activity 仍然可见(前台 Activity 部分透明,或未覆盖整个屏幕)。
3.停止
片段不可见。宿主 Activity 已停止,或片段已从 Activity 中移除,但已添加到返回栈。 停止片段仍然处于活动状态(系统会保留所有状态和成员信息)。 不过,它对用户不再可见,如果 Activity 被终止,它也会被终止。

参考:https://developer.android.com/guide/components/fragments?hl=zh-cn

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值