Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期

十度 Android 2015年12月01日 收藏

前情提要(Previously)

本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 作为开发 IDE 的同学开路。
PS:其实我就是现学现卖,希望我能坚持刷完。

在前面刚学习了Fragment,这次来了解一下她的生命周期。

系列目录在此:

Fragment 的生命周期

先来看一下 Fragment 的生命周期图解吧。

fragment_lifecycle

与 Activity 的 关系

Fragment 必须是依存于 Activity 而存在的,因此 Activity 的生命周期会直接影响到 Fragment 的生命周期。Android 官网这张图很好的说明了两者生命周期的关系,如下

activity_fragment_lifecycle

跟 Activity 比较,多了下面几个回调函数:

  1. onAttach(),当 Fragment 和 Activity 建立关联时调用。
  2. onCreateView(),当为 Fragment 创建视图时调用。
  3. onActivityCreated(),与 Fragment 关联的 Activity 已经创建完毕时调用。
  4. onDEstroyView(),当与 Fragment 关联的视图被移除时调用。
  5. onDetach(),当 Fragment 和 Activity 接触关联是调用。

体验 Fragment 的生命周期

打开上一篇 Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础 中的 FragmentTest 项目,修改 RightFragment 中的代码,重写每一个回调方法在里面加上输出日志,代码如下:

public class RightFragment extends Fragment {

  1.   public static final String TAG = "RightFragment";
  2.  
  3.   @Override
  4.   public void onAttach(Activity activity) {
  5.       super.onAttach(activity);
  6.       Log.d(TAG, "onAttach");
  7.   }
  8.  
  9.   @Override
  10.   public void onCreate(Bundle savedInstanceState) {
  11.       super.onCreate(savedInstanceState);
  12.       Log.d(TAG, "onCreate");
  13.   }
  14.  
  15.   @Override
  16.   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  17.       Log.d(TAG, "onCreateView");
  18.       View view = inflater.inflate(R.layout.right_fragment, container, false);
  19.       return view;
  20.   }
  21.  
  22.   @Override
  23.   public void onActivityCreated(Bundle savedInstanceState) {
  24.       super.onActivityCreated(savedInstanceState);
  25.       Log.d(TAG, "onActivityCreated");
  26.   }
  27.  
  28.   @Override
  29.   public void onStart() {
  30.       super.onStart();
  31.       Log.d(TAG, "onStart");
  32.   }
  33.  
  34.   @Override
  35.   public void onResume() {
  36.       super.onResume();
  37.       Log.d(TAG, "onResume");
  38.   }
  39.  
  40.   @Override
  41.   public void onPause() {
  42.       super.onPause();
  43.       Log.d(TAG, "onPause");
  44.   }
  45.  
  46.   @Override
  47.   public void onStop() {
  48.       super.onStop();
  49.       Log.d(TAG, "onStop");
  50.   }
  51.  
  52.   @Override
  53.   public void onDestroyView() {
  54.       super.onDestroyView();
  55.       Log.d(TAG, "onDestroyView");
  56.   }
  57.  
  58.   @Override
  59.   public void onDestroy() {
  60.       super.onDestroy();
  61.       Log.d(TAG, "onDestroy");
  62.   }
  63.  
  64.   @Override
  65.   public void onDetach() {
  66.       super.onDetach();
  67.       Log.d(TAG, "onDetach");
  68.   }

}

  • 运行,RightFragment 第一次加载,查看 Logcat 中的日志,如下图

log1

  • 点击 LeftFragment 中的 Button,AnotherRightFragment 替换 RightFragment 出现,查看日志,如下图

log2

  • 按 Back 键,RightFragment 出现,查看日志,如下图

log3

  • 再按 Back 键,程序退出,查看日志,如下图

log4

OK 了,我们对 Fragment 的生命周期已经了解的差不多,更深刻的理解以后用到的时候再说了。

其它(Miscellaneous)

尽管我试图在本文中尽量完整的进行描述,但受限于篇幅和我的个人水平,本文难免有所遗漏,欢迎在评论中指出。