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方法

2.Fragment創建啦,執行onCreate方法

3.Fragment的View創建啦,執行onCreateView方法

4.Activity的onCreate執行了

5.Fragment收到Activity創建好啦,執行onActivityCreated方法

6.Activity的onStart執行了

7.Fragment啟動啦,執行onStart方法

8.Activity的onResume執行了

9.Fragment顯示到前台啦,執行onResume方法

 

點擊返回(關閉) --> Activity--> layout<fragment class --> fragment

1.Fragment暫停啦,執行onPause方法

2.Activity的onPause執行了

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM