欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)例探究Android應(yīng)用編寫時(shí)Fragment的生命周期問題

 更新時(shí)間:2016年02月25日 14:29:49   作者:冰凍魚  
這篇文章主要介紹了Android應(yīng)用編寫時(shí)Fragment的生命周期問題探究,resumed和paused以及stoped三種狀態(tài)的控制需要熟練掌握,需要的朋友可以參考下

管理fragment的生命周期有些像管理activity的生命周期。Fragment可以生存在三種狀態(tài):

Resumed:

Fragment在一個(gè)運(yùn)行中的activity中并且可見。

Paused:

另一個(gè)activity處于最頂層,但是fragment所在的activity并沒有被完全覆蓋(頂層的activity是半透明的或不占據(jù)整個(gè)屏幕)。

Stoped:

Fragment不可見??赡苁撬诘腶ctivity處于stoped狀態(tài)或是fragment被刪除并添加到后退棧中了。此狀態(tài)的fragment仍然存在于內(nèi)存中。

同樣類似于activity,你可以把fragment的狀態(tài)保存在一個(gè)Bundle中,在activity被recreated時(shí)就需用到這個(gè)東西。你可以在onSaveInstanceState()方法中保存狀態(tài)并在onCreate()或onCreateView()或onActivityCreated()中恢復(fù)。

Fragment與Activity的生命周期中最大的不同就是存儲(chǔ)到后退棧中的過程。Activity是在停止時(shí)自動(dòng)被系統(tǒng)壓入停止棧,并且這個(gè)棧是被系統(tǒng)管理的;而fragment是被壓入activity所管理的一個(gè)后退棧,并且只有你在刪除fragment后并明確調(diào)用addToBackStack()方法時(shí)才被壓入。

然而,管理fragment的生命周期與管理activity的生命周期極其相似。你所需要去思考的是activity的生命周期如何影響fragment的生命周期。


下面這張F(tuán)ragment生命周期圖大家應(yīng)該看得很多了:

2016225142621541.jpg (317×847)

但最近在寫PageManager(管理頁面跳轉(zhuǎn)),發(fā)現(xiàn)切換頁面時(shí),之前的頁面走完onDestoryView就直接onDestory了,回來又重新onCreate,如果用hide和show的方式,都不走生命周期,看了ApiDemo代碼,發(fā)現(xiàn)原因,整理一下.
切換Fragment有兩種方式,一種是add新的,并把舊的hide,另一種是replace.
舊的Fragment為Fragment1,新的是Fragment2,忽略非關(guān)鍵生命周期。

使用add方法切換時(shí):
載入Fragment1

Fragment1 onCreate
Fragment1 onCreateView
Fragment1 onStart
Fragment1 onResume

用以下代碼切到Fragment2:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.hide(Fragment1);
ft.add(R.id.simple_fragment, Fragment2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

Fragment1不走任何生命周期,但會(huì)調(diào)onHiddenChanged方法

Fragment2 onCreate
Fragment2 onCreateView
Fragment2 onStart
Fragment2 onResume

回到Fragment1,Remove Fragment2:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(Fragment2);
ft.show(Fragment1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

Fragment1還是不走任何生命周期,調(diào)onHiddenChanged方法

Fragment2 onPause
Fragment2 onStop
Fragment2 onDestoryView
Fragment2 onDestory

用這種方法切換,F(xiàn)ragment在隱藏時(shí)并不會(huì)走onDestoryView,所以顯示時(shí)也不會(huì)走onCreateView,所有View都一直保存在內(nèi)存中。
用replace方法:
載入Fragment1生命周期與上面相同:

Fragment1 onCreate
Fragment1 onCreateView
Fragment1 onStart
Fragment1 onResume

切到Fragment2:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.simple_fragment, Fragment2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

這次的Fragment1走生命周期了

Fragment1 onPause
Fragment1 onStop
Fragment1 onDestoryView
Fragment1 onDestory
Fragment2 onCreate
Fragment2 onCreateView
Fragment2 onStart
Fragment2 onResume

真實(shí)打印出來可能是Fragment1和Fragment2混在一起的,可以看到,F(xiàn)ragment1走了onDestory,被完全回收了!
再切回到Fragment1

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.simple_fragment, Fragment1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

Fragment1 onCreate
Fragment1 onCreateView
Fragment1 onStart
Fragment1 onResume
Fragment2 onPause
Fragment2 onStop
Fragment2 onDestoryView
Fragment2 onDestory

Fragment1因?yàn)橐呀?jīng)被回收,又走onCreate,F(xiàn)ragment2被回收。

這兩種方式顯然都不滿足我的需求,且與生命周期圖不同。因?yàn)槲倚枰谟脩艨匆?看不見Fragment時(shí)register和unregister BroadcastReceiver之類的東西(onHiddenChanged也能實(shí)現(xiàn),但第一次載入顯示,以及銷毀時(shí)不會(huì)走onHiddenChanged方法),也不希望用戶回到上一個(gè)Fragment就重新創(chuàng)建整個(gè)Fragment,因?yàn)檫@樣消耗資源。

看了ApiDemo,發(fā)現(xiàn)也是用replace方法,但是,我少了一行:

ft.addToBackStack(null);

在replace時(shí)加上這行,可以把原來的Fragment放入棧中,走onDestoryView方法,但不會(huì)onDestory,返回時(shí),直接onCreateView,不再onCreate.
返回直接調(diào)用popBackStack()方法:

getFragmentManager().popBackStack();

相關(guān)文章

  • AndroidStudio4.1 自定義模板的使用方法

    AndroidStudio4.1 自定義模板的使用方法

    這篇文章主要介紹了AndroidStudio4.1 自定義模板的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Android Studio調(diào)試功能使用匯總

    Android Studio調(diào)試功能使用匯總

    這篇文章主要為大家詳細(xì)介紹了Android Studio調(diào)試功能使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • android ToolBar的簡單使用

    android ToolBar的簡單使用

    這篇文章主要為大家詳細(xì)介紹了android ToolBar的簡單使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • android通過google api獲取天氣信息示例

    android通過google api獲取天氣信息示例

    這篇文章主要介紹了android通過google api獲取天氣信息示例,需要的朋友可以參考下
    2014-04-04
  • Android打造炫酷進(jìn)度條效果

    Android打造炫酷進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android打造炫酷進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android編程實(shí)現(xiàn)在Bitmap上涂鴉效果

    Android編程實(shí)現(xiàn)在Bitmap上涂鴉效果

    這篇文章主要介紹了Android編程實(shí)現(xiàn)在Bitmap上涂鴉效果的方法,涉及Android界面布局,事件響應(yīng)及Bitmap操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • Android基本游戲循環(huán)實(shí)例分析

    Android基本游戲循環(huán)實(shí)例分析

    這篇文章主要介紹了Android基本游戲循環(huán),以完整實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)基本游戲循環(huán)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 詳解Flutter如何繪制曲線,折線圖及波浪動(dòng)效

    詳解Flutter如何繪制曲線,折線圖及波浪動(dòng)效

    這篇文章主要為大家介紹線條類圖形的繪制(正弦曲線、折線圖),并且結(jié)合 Animation 實(shí)現(xiàn)了常見的波浪動(dòng)效,感興趣的小伙伴可以了解一下
    2022-03-03
  • 一文講解Kotlin中的contract到底有什么用

    一文講解Kotlin中的contract到底有什么用

    我們在開發(fā)中肯定會(huì)經(jīng)常用Kotlin提供的一些通用拓展函數(shù),當(dāng)我們進(jìn)去看源碼的時(shí)候會(huì)發(fā)現(xiàn)許多函數(shù)里面有contract{}包裹的代碼塊,那么這些代碼塊到底有什么作用呢?下面這篇文章主要給大家介紹了關(guān)于Kotlin中contract到底有什么用的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Android實(shí)現(xiàn)文字逐字顯示出來

    Android實(shí)現(xiàn)文字逐字顯示出來

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)文字逐字顯示出來效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論