android:片段的生命週期

來源:互聯網
上載者:User

標籤:

和活動一樣,片段也有自己的生命週期,並且它和活動的生命週期實在是太像了,我相 信你很快就能學會,下面我們馬上就來看一下。

 

4.3.1    片段的狀態和回調

 

還記得每個活動在其生命週期內可能會有哪幾種狀態嗎?沒錯,一共有運行狀態、暫停 狀態、停止狀態和銷毀狀態這四種。類似地,每個片段在其生命週期內也可能會經曆這幾種 狀態,只不過在一些細小的地方會有部分區別。

1.    運行狀態 當一個片段是可見的,並且它所關聯的活動正處於運行狀態時,該片段也處於運行

狀態。

 

 

 

2.    暫停狀態

當一個活動進入暫停狀態時(由於另一個未佔滿螢幕的活動被添加到了棧頂),與它相關聯的可見片段就會進入到暫停狀態。

3.    停止狀態 當一個活動進入停止狀態時,與它相關聯的片段就會進入到停止狀態。或者通過調

用 FragmentTransaction 的 remove()、replace()方法將片段從活動中移除,但有在事務提 交之前調用 addToBackStack()方法,這時的片段也會進入到停止狀態。總的來說,進入 停止狀態的片段對使用者來說是完全不可見的,有可能會被系統回收。

4.    銷毀狀態 片段總是依附於活動而存在的,因此當活動被銷毀時,與它相關聯的片段就會進入

到銷毀狀態。或者通過調用 FragmentTransaction 的 remove()、replace()方法將片段從活 動中移除,但在事務提交之前並沒有調用 addToBackStack()方法,這時的片段也會進入 到銷毀狀態。 結合之前的活動狀態,相信你理解起來應該毫不費力吧。同樣地,Fragment 類中也提供

了一系列的回調方法,以覆蓋片段生命週期的每個環節。其中,活動中有的回調方法,片段中幾乎都有,不過片段還提供了一些附加的回調方法,那我們就重點來看下這幾個回調。

1.    onAttach()

當片段和活動建立關聯的時候調用。

2.    onCreateView()

為片段建立視圖(載入布局)時調用。

3.    onActivityCreated()

確保與片段相關聯的活動一定已經建立完畢的時候調用。

4.    onDestroyView()

當與片段關聯的視圖被移除的時候調用。

5.    onDetach()

當片段和活動解除關聯的時候調用。片段完整的生命週期可參考圖 4.8,圖片源自 Android 官網。

 

 

 

圖   4.8

 

4.3.2    體驗片段的生命週期

 

為了讓你能夠更加直觀地體驗片段的生命週期,我們還是通過一個例子來實踐一下。例子很簡單,仍然是在 FragmentTest 項目的基礎上改動的。

修改 RightFragment 中的代碼,如下所示:

 

public class RightFragment extendsFragment {

 

 

public static final String TAG ="RightFragment";

 

 

@Override

public void onAttach(Activity activity) {

super.onAttach(activity); Log.d(TAG, "onAttach");

}

 

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); Log.d(TAG,"onCreate");

}

 

 

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

Log.d(TAG, "onCreateView");

View view = inflater.inflate(R.layout.right_fragment, container, false);

return view;

}

 

 

@Override

public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState); Log.d(TAG,"onActivityCreated");

}

 

 

@Override

public void onStart() { super.onStart();Log.d(TAG, "onStart");

}

 

 

 

 

@Override

public void onResume() {super.onResume(); Log.d(TAG, "onResume");

}

 

 

@Override

public void onPause() { super.onPause();Log.d(TAG, "onPause");

}

 

 

@Override

public void onStop() { super.onStop();Log.d(TAG, "onStop");

}

 

 

@Override

public void onDestroyView() {super.onDestroyView(); Log.d(TAG, "onDestroyView");

}

 

 

@Override

public void onDestroy() {super.onDestroy(); Log.d(TAG, "onDestroy");

}

 

 

@Override

public void onDetach() {super.onDetach(); Log.d(TAG, "onDetach");

}

 

 

}

我們在 RightFragment 中的每一個回調方法裡都加入了列印日誌的代碼,然後重新運行 程式,這時觀察 LogCat 中的列印資訊, 4.9所示。

 

 

 

 

 

圖   4.9

 

可以看到,當RightFragment 第一次被載入到螢幕上時,會依次執行onAttach() 、 onCreate() 、onCreateView() 、onActivityCreated() 、onStart() 和 onResume() 方法。然後點擊 LeftFragment 中的按鈕,此時列印資訊 4.10 所示。

 

 

 

圖   4.10

 

由於 AnotherRightFragment 替換了 RightFragment,此時的 RightFragment 進入了停止狀 態,因此 onPause()、onStop()和 onDestroyView()方法會得到執行。當然如果在替換的時候沒 有調用 addToBackStack() 方法,此時的 RightFragment 就會進入銷毀狀態,onDestroy() 和 onDetach()方法就會得到執行。

接著按下 Back 鍵,RightFragment 會重新回到螢幕,列印資訊 4.11所示。

 

 

 

圖   4.11

 

由 於 RightFragment 重 新 回 到 了 運 行 狀 態 , 因 此 onActivityCreated() 、 onStart() 和 onResume()方法會得到執行。注意此時 onCreate()和 onCreateView()方法並不會執行,因為我 們藉助了 addToBackStack()方法使得 RightFragment 和它的視圖並沒有銷毀。

再次按下 Back 鍵退出程式,列印資訊 4.12 所示。

 

圖   4.12

 

依次會執行 onPause()、onStop()、onDestroyView()、onDestroy()和 onDetach()方法,最 終將活動和片段一起銷毀。這樣片段完整的生命週期你也體驗了一遍,是不是理解得更加深刻了?

另外值得一提的是,在片段中你也是可以通過 onSaveInstanceState()方法來儲存資料的, 因為進入停止狀態的片段有可能在系統記憶體不足的時候被回收。儲存下來的資料在onCreate()、onCreateView()和 onActivityCreated()這三個方法中你都可以重新得到,它們都含 有一個 Bundle 類型的 savedInstanceState 參數。

android:片段的生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.