如果我是Android面試官二

ShanLiang_Build發表於2018-05-30

呼,明明感覺很累,但是看眼日曆今天才週三。因開會耽誤了晚間的跑步,早點到家來更一篇吧。

四 Fragment用嗎,簡單的說說你對它的理解

Fragment主要是用於一個Activity的多元化。有時候根據產品需求,要求一個頁面能夠根據配置展示不同的樣式和排版。這時就是Fragment大顯身手的的時候了。常用新增方法還是動態新增。通過FragmentManager獲取transaction,通過transaction新增到指定佈局上,之後提交transaction。

小技巧:如果想讓fragment也有返回棧的效果,需要在transaction替換佈局之後,提交之前,加上一句addToBackStack(null)。之後再按返回鍵發現fragment也進入返回棧了。

Fragment經常拿來和Activity作對比,因為二者有著極其相似的功能以及生命週期,但是卻又細有區別。

Fragment的生命週期同樣可以分為四種狀態

1 執行狀態

當一個碎片是可見的,並且它所關聯的活動也正處於執行狀態,該碎片也處於執行狀態。

2 暫停狀態

當一個活動進入暫停狀態時,與之關聯的碎片也進入暫停狀態。

3 停止狀態

當一個活動進入停止狀態時,與之關聯的碎片也進入停止狀態。或者通過呼叫transaction的remove,replace等方法將碎片從活動中移除。總的來說,進入停止狀態的碎片對使用者來說是完全不可見的,有可能被系統回收。

4 銷燬狀態

碎片總是依附於活動,當活動被銷燬時,碎片也進入銷燬狀態。或者使用transaction將碎片移除時,也會進入銷燬狀態。

相比於活動的生命週期回撥方法,碎片增加了額外的方法

onAttach方法。當碎片和活動建立關聯時呼叫。

onCreateView方法。為碎片建立檢視時呼叫。

onActivityCreated方法。確保與碎片相關聯的活動一定已經建立完畢時呼叫。

onDestroyView方法。當與碎片關聯的檢視被移除時呼叫。

onDetach方法。當碎片和活動解除關係的時候呼叫。

一套完整的fragment載入流程為onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume。

之後移除onPause、onStop、onDestroyView、onDestroy、onDetach。

聊到這裡插一句題外知識,就是android橫豎屏切換遇到的問題。

在預設設定下,橫豎屏切換是會帶來onCreate方法重新呼叫的問題。也就是伴隨著activity中的資料會丟失。如果想要保證切換後資料還在,就要處理資料儲存問題,一般是用saveInstance來解決。

對於螢幕切換問題,常規處理方式如下:

1 通過設定android:screenOrientation屬性來禁止螢幕切換。

2 建立橫豎屏兩種佈局,通過資原始檔標識或者程式碼中判斷的方式來根據不同情況載入不同佈局

3 設定configChange屬性,通過重寫onConfigurationChanged方法可以跳過onCreate等步驟,將佈局切換和資料儲存呼叫放到onConfigurationChanged方法裡來完成


相關文章