以下內容整理自互聯網,僅用于個人學習
- 完整生存期:onCreate()方法和onDestroy()方法之間。
- 可見生存期:onStart()方法和onStop()方法之間。
- 前臺生存期:onResume()方法和onPause()方法之間。
Activity和Fragment生命周期對比.png
Activity
activity生命周期.png
Fragment
1. 為什么需要Fragment
為了更好的利用大屏幕的空間,同時適配手機和平板、UI和邏輯的共享,在平板中廣泛使用。
2. Fragment生命周期
fragment生命周期.png
3. Fragment比Activity多了幾個額外的生命周期回調方法:
- onAttach(Activity):當Fragment和Activity發生關聯時使用
- onCreateView(LayoutInflater, ViewGroup, Bundle):創建該Fragment的視圖
- onActivityCreate(Bundle):當Activity的onCreate方法返回時調用
- onDestoryView():與onCreateView相對應,當該Fragment的視圖被移除時調用
- onDetach():與onAttach相對應,當Fragment與Activity關聯被取消時調用
4. 動態添加fragment的步驟
- 創建待添加的fragment實例。
- 獲取FragmentManager,在activity中可以直接調用getFragmentManager()方法得到。
- 通過beginTransaction()方法開啟一個事務。
- 向容器中添加fragment,一般使用replace()方法實現。
- 調用commit()方法提交事務。
AnotherFragment fragment = new AnotherFragment();
FragmentManager fm = getFragmentManager();
fm.beginTransaction()
.replace(R.id.fragmentContainer, fragment)
.commit();
5. Fragment與Activity之間的交互
Fragment與Activity之間的交互可以通過Fragment.setArguments(Bundle args)以及Fragment.getArguments()來實現。
6. Fragment狀態的持久化
- 可以通過protected void onSaveInstanceState(Bundle outState)
,protected void onRestoreInstanceState(Bundle savedInstanceState)
狀態保存和恢復的方法將狀態持久化。 - 讓Android自動幫我們保存
- FragmentManager.putFragment(Bundle bundle, String key, Fragment fragment)是在Activity中保存Fragment的方法。
- FragmentManager.getFragment(Bundle bundle, String key)是在Activity中獲取所保存的Frament的方法。
很顯然,key就傳入Fragment的id,fragment就是你要保存狀態的fragment,但,我們注意到上面的兩個方法,第一個參數都是Bundle,這就意味著FragmentManager是通過Bundle去保存Fragment的。但是,這個方法僅僅能夠保存Fragment中的控件狀態,比如說EditText中用戶已經輸入的文字(注意!在這里,控件需要設置一個id,否則Android將不會為我們保存控件的狀態),而Fragment中需要持久化的變量依然會丟失,但依然有解決辦法,就是利用方法一!