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

 

posted @ 2016-07-29 11:45  Daisy-程序媛  阅读(278)  评论(0编辑  收藏  举报