Fragment-生命周期
Fragment生命周期图
一、Fragment的几种状态:
与Activity类似,Fragment也有一下几种状态:
· 活动状态:当前Fragment位于前台,可见,可获得焦点。
· 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点。
· 停止状态:不可见,失去焦点。
· 销毁状态:该Fragment被完全删除或被结束。
二、Fragment的回调方法:
在Fragment的生命周期中,有一下方法会被回调:
·
1. 当一个fragment被创建的时候,它会经历以下状态.
- onAttach()
- onCreate()
- onCreateView()
- onActivityCreated()
2. 当这个fragment对用户可见的时候,它会经历以下状态。
- onStart()
- onResume()
3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。
- onPause()
- onStop()
4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
- onPause()
- onStop()
- onDestroyView()
- onDestroy() // 本来漏掉类这个回调,感谢xiangxue336提出。
- onDetach()
5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
- onCreate()
- onCreateView()
- onActivityCreated()
6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
- onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
- onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
- onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
- onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
- onDetach() —— 当fragment和activity分离的时候,调用这个方法。
三、Fragment生命周期实例
Activity的代码如下:
import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { private final String TAG = "cui"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(TAG,"Activity-----onCreate"); } @Override protected void onStart() { super.onStart(); Log.i(TAG,"Activity-----onStart"); } @Override protected void onResume() { super.onResume(); Log.i(TAG,"Activity-----onResume"); } @Override protected void onPause() { super.onPause(); Log.i(TAG,"Activity-----onPause"); } @Override protected void onStop() { super.onStop(); Log.i(TAG,"Activity-----onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG,"Activity-----onDestroy"); } }
Fragment代码如下:
package com.jkxy.fragmentdemo; import android.app.Fragment; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by cuishuang on 16/7/29. */ public class TitleFragment extends Fragment { private final String TAG = "cui"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG,"Fragment------onCreateView"); return inflater.inflate(R.layout.fragment_title,container,false); } @Override public void onAttach(Context context) { super.onAttach(context); Log.i(TAG,"Fragment------onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG,"Fragment------onCreate"); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i(TAG,"Fragment------onActivityCreated"); } @Override public void onStart() { super.onStart(); Log.i(TAG,"Fragment------onStart"); } @Override public void onResume() { super.onResume(); Log.i(TAG,"Fragment------onResume"); } @Override public void onPause() { super.onPause(); Log.i(TAG,"Fragment------onPause"); } @Override public void onStop() { super.onStop(); Log.i(TAG,"Fragment------onStop"); } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG,"Fragment------onDestroy"); } @Override public void onDetach() { super.onDetach(); Log.i(TAG,"Fragment------onDetach"); } }
当启动Activity的时候走的Log日志:
07-29 11:52:40.937 20599-20599/? I/cui: Fragment------onAttach 07-29 11:52:40.937 20599-20599/? I/cui: Fragment------onCreate 07-29 11:52:40.938 20599-20599/? I/cui: Fragment------onCreateView 07-29 11:52:40.953 20599-20599/? I/cui: Activity-----onCreate 07-29 11:52:40.953 20599-20599/? I/cui: Fragment------onActivityCreated 07-29 11:52:40.959 20599-20599/? I/cui: Activity-----onStart 07-29 11:52:40.959 20599-20599/? I/cui: Fragment------onStart 07-29 11:52:40.959 20599-20599/? I/cui: Activity-----onResume 07-29 11:52:40.959 20599-20599/? I/cui: Fragment------onResume
当销毁的时候走的Log日志:
07-29 11:53:20.794 21186-21186/? I/cui: Fragment------onAttach 07-29 11:53:20.794 21186-21186/? I/cui: Fragment------onCreate 07-29 11:53:20.795 21186-21186/? I/cui: Fragment------onCreateView 07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onCreate 07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onActivityCreated 07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onStart 07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onStart 07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onResume 07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onResume
总结:启动的时候是先走Activity接着是Fragment,退出销毁的时候先走Fragment再走Activity