一 总览
为了方便后期的记忆,我按顺序把它们排列好,编上号了
一 创建
编号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解绑
二 用代码来测试(栈外)
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");
}
}
版权声明:本文为m0_45877477原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。