一、Fragment生命周期方法概述
public class ExampleFragment extends Fragment {
public ExampleFragment() {
// Required empty public constructor
}
// Fragment創建
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
}
// Fragment創建視圖
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ...
return rootView;
}
// Fragment添加到Activity
@Override
public void onAttach(Context context) {
super.onAttach(context);
// ...
}
// Fragment即將顯示
@Override
public void onStart() {
super.onStart();
// ...
}
// Fragment可交互
@Override
public void onResume() {
super.onResume();
// ...
}
// Fragment不可交互
@Override
public void onPause() {
super.onPause();
// ...
}
// Fragment不可見
@Override
public void onStop() {
super.onStop();
// ...
}
// Fragment解除與Activity的關聯
@Override
public void onDetach() {
super.onDetach();
// ...
}
// Fragment銷毀視圖
@Override
public void onDestroyView() {
super.onDestroyView();
// ...
}
// Fragment銷毀
@Override
public void onDestroy() {
super.onDestroy();
// ...
}
}
Fragment是Android開發中常見的一個關鍵組件,因此學習Fragment的生命周期也就成為了必須掌握的內容之一。在這裡,我們將圍繞着生命周期方法,在接下來的段落中對Fragment的生命周期進行詳細的講解。
二、Fragment生命周期方法是用來加載
在Fragment的生命周期中,其中被廣泛運用的就是onCreateView()方法,這個方法用來加載Fragment的視圖,還可以在這個過程中完成一些初始化的工作。
這個方法通常在Fragment創建時調用,具體調用時機為:
1、如果Fragment離線並且它具有UI,則在它被更新為在線並從其視圖層次結構中刪除時調用onCreateView()。
2、如果Fragment在線並且它具有UI,則在將其視圖從其視圖層次結構中刪除時調用onCreateView()。
三、Fragment生命周期變化
Fragment的生命周期是會發生變化的。當它被創建時,將會經歷onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()和onResume()等生命周期方法。當Fragment被銷毀時,將會經歷onPause()、onStop()、onDestroyView()、onDestroy()和onDetach()等生命周期方法。
在這些生命周期方法的調用過程中,Fragment的狀態也隨之發生變化,如下表所示:
四、Fragment生命周期有哪些
在Android開發者中,常見的對Fragment的生命周期方法的描述通常是這樣的:
onCreateView() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
雖然這個描述可以大致了解Fragment的生命周期,但是其實還有很多細節和變化。常用的生命周期方法及其作用如下所示:
五、Fragment生命周期4種狀態
Fragment的生命周期狀態一共分為4種,即:
1、Active:Fragment當前處於活躍狀態,也就是當前用戶正在與Fragment進行交互。
2、Paused:Fragment處於失去焦點的狀態。
3、Stopped:Fragment不可見,但是仍然和Activity相關聯。
4、Destroyed:Fragment已被銷毀,其上下文已被完全銷毀,並且它與Activity的鏈接已斷開。
六、Fragment生命周期表
下面是對Fragment生命周期的詳細描述:
生命周期方法 | 調用時機 | 作用 |
---|---|---|
onAttach() | 當Fragment被添加到Activity時 | Fragment與Activity相關聯 |
onCreate() | 當Fragment被創建時 | 完成初始化工作 |
onCreateView() | 當Fragment首次創建View時 | 加載並返回Fragment的布局 |
onActivityCreated() | 當Fragment所依附的Activity完成onCreate()時 | 完成Fragment添加到Activity後的操作,如恢復ABD, 延遲動畫等 |
onStart() | 當Fragment開始可見時 | Fragment是可見且已經附加到Activity |
onResume() | 當Fragment可交互時 | Fragment處於棧頂,用戶可以與之交互 |
onPause() | 當Fragment失去焦點時 | Fragment不可見,但是仍然存活 |
onStop() | 當Fragment不可見時 | Fragment未銷毀,但是不可見,可能已被回收 |
onDestroyView() | 當Fragment的視圖被銷毀時 | 解除View的引用,避免內存泄漏 |
onDestroy() | 當Fragment被銷毀時 | 釋放資源 |
onDetach() | 當Fragment與Activity解除關聯時 | 釋放所有與Activity相關聯的資源 |
七、Fragment生命周期圖
為了更加方便地理解Fragment的生命周期,下面是一張生命周期的圖表。
八、Fragment生命周期方法詳解
1、onCreate()
在Fragment創建時回調。這個生命周期方法可以完成一些初始化,如創建數據集或者一些文件。
2、onAttach()
當Fragment被附加到Activity時回調。在這個生命周期方法中,我們可以獲取與當前Fragment相關聯的Activity,通過調用getActivity()方法來實現。
@Override
public void onAttach(Context context) {
super.onAttach(context);
//獲取到當前 Fragment 所屬 activity 的引用
mActivity = (MainActivity) context;
}
3、onCreateView()
在Fragment首次創建視圖時調用。這個方法通常用於初始化Fragment的布局,並返回這個布局的根View。此外,在onCreateView()方法中還可以設置Fragment的顯示風格、添加事件監聽和初始化一些控件等。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 最好加上root 參數,否則報錯
View root = inflater.inflate(R.layout.fragment_layout, container, false);
// 初始化布局
initView(root);
return root;
}
private void initView(View root) {
}
4、onActivityCreated()
在Activity創建之後,Fragment將觸發onActivityCreated()方法。在這個生命周期方法中,Fragment已經關聯到Activity,並且Activity的視圖層次結構已經完全初始化,所以這裡可以擴展Activity的UI等。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// ...
}
5、onStart()
在用戶可以看見Fragment時回調。這個生命周期方法表示Fragment可見,已經添加到Activity中,但是可能不在前台。在onStart()方法中我們可以處理Fragment相關的可見性,比如是否顯示廣告、是否展示一些提示、是否刷新數據等。
@Override
public void onStart() {
super.onStart();
// ...
}
6、onResume()
這個生命周期方法表示Fragment正在前台,可以與用戶進行交互。在onResume()方法中,我們可以開啟或恢復一些服務或線程,從而維護Fragment的UI顯示。
@Override
public void onResume() {
super.onResume();
// ...
}
7、onPause()
Fragment正在前台並與用戶進行交互時,如果發生了一些影響到了頁面可見性的事情,比如打開了另一個Activity、彈出了Dialog等,那麼onPause()方法將會被調用。在這裡,我們可以暫停一些資源的使用,比如MediaPlayer、網絡操作等。
@Override
public void onPause() {
super.onPause();
// ...
}
8、onStop()
當Fragment不再可見時回調,比如被另一個Fragment覆蓋或者當Activity進入後台時。onStop()方法可以用來停止或釋放資源,比如停止動畫、取消網絡訪問等。
@Override
public void onStop() {
super.onStop();
// ...
}
9、onDestroyView()
當Fragment視圖被銷毀時回調。在onDestroyView()方法中,我們可以銷毀那些與UI相關的資源,如View和Dialog等。但是,Fragment所關聯的Activity仍然存在,所以Fragment不能被銷毀。
@Override
public void onDestroyView() {
super.onDestroyView();
// ...
}
10、onDestroy()
當Fragment將要被銷毀時回調。在這個生命周期方法中,我們可以銷毀一些資源,比如停止動畫、取消網絡訪問等。此外,如果在onCreateView()方法中創建了非View相關的資源,那麼onDestroy()方法中也要進行釋放。
@Override
public void onDestroy() {
super.onDestroy();
// ...
}
11、onDetach()
當Fragment與Activity解除關聯時回調。在這個生命周期方法中,我們可以進行資源釋放或者清除操作。例如在onAttach()方法中獲取到的Activity的應用需要在onDetach()方法中清除掉。
@Override
public void onDetach() {
super.onDetach();
// ...
}
九、Fragment生命周期方法包括
Fragment的生命周期包括Fragment的創建周期、Fragment的可見性和狀態周期、Fragment的交互周期及Fragment的系統相關周期。
十、總結
經過這麼詳
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295707.html