Android-fragment生命周期

在上一篇博客,Android-fragment简介-fragment的简单使用介绍了fragment简单的使用,还介绍了fragment简介(fragment是有生命周期的)

  

必须知道fragment生命周期,才能正确的使用fragment:

 

MyTestFragmentActivity3

package liudeli.activity.fragment;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import liudeli.activity.R;

public class MyTestFragmentActivity3 extends Activity {

    private final String TAG = MyFragment3.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_fragment3);

        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");
    }

    /***** 当一个Activity再也不被使用时,它会经历一系列反向回调:*****/

    @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");
    }
}

 

R.layout.activity_test_fragment3 Activity布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/fragment"
        class="liudeli.activity.fragment.MyFragment3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

 

MyFragment3 生命周期

package liudeli.activity.fragment;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Fragment的生命周期
 */
public class MyFragment3 extends Fragment {

    private final String TAG = MyFragment3.class.getSimpleName();

    /**
     * 当Fragment附加到Activity之上时调用此方法
     * @param activity
     */
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onAttach()");
    }

    /**
     * 当Fragment初始化时调用此方法
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onCreate()");
    }

    /**
     * 当Fragment建立View(1.布局加载加载Layout 2.new View)并返回
     * @param inflater 布局加载器 用来加载布局
     * @param container
     * @param savedInstanceState 保存临时数据,和Activity的onCreate->savedInstanceState 同样
     * @return
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onCreateView()");

        TextView tv = new TextView(getActivity()); // 在Fragment不能使用this

        /**
         * 注意:⚠️ 此方法必需要返回View,不然会报错
         */
        return tv;
    }

    /**
     * Activity已建立完成
     * @param savedInstanceState  保存临时数据,和Activity的onCreate->savedInstanceState 同样
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onActivityCreated()");
    }

    /**
     * 当Fragment启动
     */
    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onStart()");
    }

    /**
     * 当Fragment活跃在前台显示
     */
    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onResume()");
    }


    /***** 当一个片断再也不被使用时,它会经历一系列反向回调:*****/


    /**
     * 当Fragment再也不前台
     */
    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onPause()");
    }

    /**
     * 当Fragment再也不前台 不彻底显示 会 onStop
     */
    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onStop()");
    }

    /**
     * 当Fragment销毁本身的控件
     */
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onDestroyView()");
    }

    /**
     * 当Fragment销毁本身
     */
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onDestroy()");
    }

    /**
     * 当Fragment 离开 Activity (不附加在Activity之上了 离开了)
     */
    @Override
    public void onDetach() {
        super.onDetach();
        Log.d(TAG, ">>>>>>>>>>>>>>> MyFragment onDetach()");
    }
}

 

 


 

 

如下动态有两个动做

动做一:Fragment 附加到 Activity 上

动做二:Fragment 离开Activity 

 

打开 --> Activity--> layout<fragment class --> fragment

1.Fragment附加到Activity之上 ,执行onAttach方法html

2.Fragment建立啦,执行onCreate方法android

3.Fragment的View建立啦,执行onCreateView方法web

4.Activity的onCreate执行了app

5.Fragment收到Activity建立好啦,执行onActivityCreated方法ide

6.Activity的onStart执行了布局

7.Fragment启动啦,执行onStart方法this

8.Activity的onResume执行了spa

9.Fragment显示到前台啦,执行onResume方法3d

 

点击返回(关闭) --> Activity--> layout<fragment class --> fragment

1.Fragment暂停啦,执行onPause方法

2.Activity的onPause执行了code

3.Fragment中止了,执行onStop方法

4.Activity的onStop执行了

5.Fragment销毁本身的控件,执行onDestroyView方法

6.Fragment销毁本身,执行onDestroy方法

7.Fragment离开Activity,再也不附近啦,执行onDetach方法

8.Activity销毁了,执行onDestroy方法

 

 

打开 --> Activity--> layout<fragment class --> fragment

12-26 02:07:35.066 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onAttach()
12-26 02:07:35.066 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onCreate()
12-26 02:07:35.066 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onCreateView()
12-26 02:07:35.068 5493-5493/? I/MyFragment3: onCreate
12-26 02:07:35.068 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onActivityCreated()
12-26 02:07:35.069 5493-5493/? I/MyFragment3: onStart
12-26 02:07:35.069 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onStart()
12-26 02:07:35.069 5493-5493/? I/MyFragment3: onResume
12-26 02:07:35.069 5493-5493/? D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onResume()

 

点击返回(关闭) --> Activity--> layout<fragment class --> fragment

12-26 02:14:17.461 5792-5792/liudeli.activity D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onPause()
12-26 02:14:17.461 5792-5792/liudeli.activity I/MyFragment3: Activity onPause
12-26 02:14:18.029 5792-5792/liudeli.activity D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onStop()
12-26 02:14:18.029 5792-5792/liudeli.activity I/MyFragment3: Activity onStop
12-26 02:14:18.029 5792-5792/liudeli.activity D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onDestroyView()
12-26 02:14:18.029 5792-5792/liudeli.activity D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onDestroy()
12-26 02:14:18.029 5792-5792/liudeli.activity D/MyFragment3: >>>>>>>>>>>>>>> MyFragment onDetach()
12-26 02:14:18.029 5792-5792/liudeli.activity I/MyFragment3: Activity onDestroy

 

相关文章
相关标签/搜索