Android fragment的生命周期详解

一 总览

为了方便后期的记忆,我按顺序把它们排列好,编上号了

一 创建
编号1 onAttach() : 和activity绑定
编号2 onCreate() : 创建fragment
编号3 onCreateView : 创建fragment的UI
编号4 onActivityCreated() : activity创建了

二 运行
编号5 onStart() : 可见
编号6 onResume() : 可见之后要与用户交互
编号7 onPause() : 不可见之前
编号8 onStop() : 不可见

三 销毁
编号9 onDestroyView: 销毁fragment的UI 
编号10 onDestroy(): 销毁fragment
编号11 onDetach() : 和activity解绑
 

二 用代码来测试(栈外)

关于fragment是否添加到栈的效果请看这篇

 1 打开到测试的fragment

编号1-6

 2 切换到别的fragment

编号7-11 

 3 back键退出程序 

编号无

 4 再次切换到测试的fragment 

编号1-6

5 home键回到主页

编号 7 8

6 再回到程序

编号5 6

 7 后台直接关掉主程序

编号 7 8

编号 9

三 用代码来测试(放到栈里)

 1 打开到测试的fragment

 编号1-6

 2 切换到别的fragment

编号 7 8 9

 3 back键返回测试的fragment

编号3-6

 4 再次切换到别的fragment

编号7 8 9

 5 home键回到主页

编号无

 6 再回到程序

编号 无

 7 后台直接关掉主程序

编号无

8 后台正常退出程序

编号7-11

 四 关于onDestroy()和onDetach()

先来看一下之前测试结果:

 

 关于onDestroy()和onDetach(),即编号 10  11,不管fragment有没有添加到栈内

1 后台直接关掉程序(非正常关闭程序) → onDestroy()和onDetach()不会被执行

2 back键正常退出程序(正常关闭程序)→如果onDestroy()和onDetach()在之前的步骤没有被执行,那么正常退出时onDestroy()和onDetach()就会执行.

 最后贴上测试的代码

package com.example.myfragmentdong;


import android.content.Context;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;



public class BlankFragment4 extends Fragment {

    //一 创建
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Log.e("cs","onAttach");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("cs","onCreate");

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.e("cs","onCreateView");
        return inflater.inflate(R.layout.fragment_blank_fragment4, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.e("cs","onActivityCreated");
    }

    //二 运行
    @Override
    public void onStart() {
        super.onStart();
        Log.e("cs","onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.e("cs","onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.e("cs","onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.e("cs","onStop");
    }

    //三 销毁

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.e("cs","onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("cs","onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.e("cs","onDetach");
    }
}

猜你喜欢

转载自blog.csdn.net/m0_45877477/article/details/125095865