关于FragmentManager动态管理Fragment时Fragment生命周期的探究
Posted 杨伟乔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于FragmentManager动态管理Fragment时Fragment生命周期的探究相关的知识,希望对你有一定的参考价值。
Fragment是android中的重要组件,在Android 3.0的时候添加进来。
关于Fragment的生命周期,我相信了解过的开发人员都应该把以下方法脱口而出:onAttach, onCreate, onCreateView, onViewCreated, onActivityCreated, onStart, onResume, onPause, onStop, onDestroyView, onDestroy, onDetach.
当Fragment以静态的方式,即通过在布局文件中以其它控件的方式设置时,它的生命周期随所在Activity的生命周期而发生变化。此时其生命周期的方法调用过程是这样的:
1,当首次展示布局页面时,其生命周期方法调用的顺序是:
2,而当关闭手机屏幕或者手机屏幕变暗时,其其生命周期方法调用的顺序是:
3,当再次对手机屏幕解锁或者手机屏幕变亮时,其生命周期方法调用的顺序是:
4,而当对当前Fragment所在屏幕按返回键时,其生命周期方法调用的顺序是:
1 01-13 17:08:46.959 3102-3102/com.yeepay.fraglifecircletest I/FragA﹕ onPause 2 01-13 17:08:46.959 3102-3102/com.yeepay.fraglifecircletest I/FragA﹕ onStop 3 01-13 17:08:46.959 3102-3102/com.yeepay.fraglifecircletest I/FragA﹕ onDestroyView 4 01-13 17:08:46.959 3102-3102/com.yeepay.fraglifecircletest I/FragA﹕ onDestroy 5 01-13 17:08:46.959 3102-3102/com.yeepay.fraglifecircletest I/FragA﹕ onDetachView Code
但是当使用FragmentManager动态的管理Fragment并且涉及到是否addToBackStack时,其生命周期的展现就略微显得有些复杂了。但是还没有复杂到无法理解。
好,下面,我们就探究一下这些问题。
首先,我们重写了两个Fragment,主要是重写了它们的生命周期方法,通过在其生命周期方法中打印出Log的方式来显示其方法的调用。
两个类分别是:
1 package com.yeepay.fraglifecircletest.frag; 2 3 import android.app.Activity; 4 import android.app.Fragment; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.ViewGroup; 1011 import com.yeepay.fraglifecircletest.R; 1213 public class FragA extends Fragment {14 private static final String TAG = FragA.class.getSimpleName(); 1516 @Override17 public void onAttach(Activity activity) { 18 super.onAttach(activity); 19 Log.i(TAG, "onAttach"); 20 } 2122 @Override23 public void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 Log.i(TAG, "onCreate"); 26 } 2728 @Override29 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 30 Log.i(TAG, "onCreateView"); 31 return inflater.inflate(R.layout.fragment_test_a, null, false); 32 } 3334 @Override35 public void onViewCreated(View view, Bundle savedInstanceState) { 36 Log.i(TAG, "onViewCreated"); 37 super.onViewCreated(view, savedInstanceState); 38 } 3940 @Override41 public void onDestroy() { 42 Log.i(TAG, "onDestroy"); 43 super.onDestroy(); 44 } 4546 @Override47 public void onDetach() { 48 Log.i(TAG, "onDetach"); 49 super.onDetach(); 50 } 5152 @Override53 public void onDestroyView() { 54 Log.i(TAG, "onDestroyView"); 55 super.onDestroyView(); 56 } 5758 @Override59 public void在 FragmentManager 中管理 BackStackEntries为啥 getFragmentManager 会导致 Incompatible Type 错误? [关闭]