Android碎片学习(三)——碎片的生命周期

代码继续接上文《Android碎片学习(二)——动态添加、返回栈、通信》
先回顾一下活动的生命周期:《安卓开发——活动的生命周期》,活动有四种状态:暂停态,运行态,停止态,销毁态。同样在碎片中,也是这四种状态

一、状态和回调

四状态

  • 运行态:碎片可见,所关联的活动处于运行态
  • 暂停态:所关联的活动处于暂停态
  • 停止态:所关联的活动处于停止态,或通过replace()remove()等方法移除掉碎片。总之,碎片此时完全不可见,有可能被系统回收
  • 销毁态:所关联的活动处于销毁态,或通过replace()remove()等方法移除掉碎片。总之,碎片此时完全不可见,已经被系统回收

五回调

onAttach():当碎片和活动建立关联时调用
onCreateView():为碎片加载布局时调用
onActivityCreated():碎片与相关联的活动已经创建完毕时调用
onDestroyView():当与碎片关联的视图被移除时调用
onDetach():碎片与活动解除关联时调用

一张图

在这里插入图片描述

二、体验生命周期

修改RightFragment.java

public class RightFragment extends Fragment {
    private static final String TAG = "RightFragment";

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: 活动第一次被创建");
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        Log.d(TAG, "onAttach: 与活动建立关联");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: 活动被销毁");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d(TAG, "onDestroyView: 碎片的布局被销毁");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d(TAG, "onDetach: 碎片和活动已解除关联");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: 活动完全不可见");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: 另一个活动准备调用");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: 活动就绪,准备交互!");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: 活动由不可见变为可见");
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated: 活动创建完毕");
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView: 碎片加载布局");
        return inflater.inflate(R.layout.right_fragment, container, false);
    }
}

启动应用:

1、右碎片显示

在这里插入图片描述
onAttach: 与活动建立关联
onCreate: 活动第一次被创建
onCreateView: 碎片加载布局
onActivityCreated: 活动创建完毕
onStart: 活动由不可见变为可见
onResume: 活动就绪,准备交互!

点击按钮:

2、右碎片被替换

在这里插入图片描述
onPause: 另一个活动准备调用
onStop: 活动完全不可见
onDestroyView: 碎片的布局被销毁

按下BACK:

3、右碎片回归

在这里插入图片描述
onCreateView: 碎片加载布局
onActivityCreated: 活动创建完毕
onStart: 活动由不可见变为可见
onResume: 活动就绪,准备交互

继续BACK:

4、右碎片销毁

在这里插入图片描述
onPause: 另一个活动准备调用
onStop: 活动完全不可见
onDestroyView: 碎片的布局被销毁
onDestroy: 活动被销毁
onDetach: 碎片和活动已解除关联

5、另一种碎片

如果没有transaction.addToBackStack(null);,那么在点击按钮时就会发生右布局的销毁。
在这里插入图片描述

三、个人总结生命周期

仔细一思索,之前的推断是错的,请将上文所有的活动替换为碎片。正确的生命周期的理解是经过以下流程:

  • 创建到显示:等布局加载完才是创建完毕
    • onAttach: 碎片与活动建立关联
    • onCreate: 碎片第一次被创建
    • onCreateView: 碎片加载布局
    • onActivityCreated: 碎片创建完毕
    • onStart: 碎片由不可见变为可见
    • onResume: 碎片就绪,准备交互
  • 被替换:等碎片不可见后才去销毁布局
    • onPause: 该碎片准备回收
    • onStop: 碎片完全不可见
    • onDestroyView: 碎片的布局被销毁
  • 回归显示:免去了第一步的建立关联和onCreate过程,直接创建布局
    • onCreateView: 碎片加载布局
    • onActivityCreated: 碎片创建完毕
    • onStart: 碎片由不可见变为可见
    • onResume: 碎片就绪,准备交互
  • 销毁:
    • onPause: 该碎片准备回收
    • onStop: 碎片完全不可见
    • onDestroyView: 碎片的布局被销毁
    • onDestroy: 碎片被销毁
    • onDetach: 碎片和活动已解除关联
发布了156 篇原创文章 · 获赞 13 · 访问量 7228

猜你喜欢

转载自blog.csdn.net/qq_41205771/article/details/104056042