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

 

相關文章
相關標籤/搜索