天天看點

面試-Activity和Fragment最全生命周期

Activity聲明周期

E/A—: onCreate

E/A—: onStart

E/A—: onResume

E/A—: onPause

E/A—: onStop

E/A—: onDestroy

A–B

E/A—: onCreate

E/A—: onStart

E/A—: onResume

跳轉B

E/A—: onPause

E/B—: onCreate

E/B—: onStart

E/B—: onResume

E/A—: onStop

傳回A

E/B—: onPause

E/A—: onRestart

E/A—: onStart

E/A—: onResume

E/B—: onStop

E/B—: onDestroy

橫豎屏切換

豎屏-橫屏

E/A—: onPause

E/A—: onStop

E/A—: onDestroy

E/A—: onCreate

E/A—: onStart

E/A—: onResume

橫屏–豎屏(同上)

解決方式:

1、設定橫豎屏(固定)

android:screenOrientation=“xxx”

landscape 橫屏

portrait 豎屏

2、設定不改變生命周期

android:configChanges=“keyboardHidden|orientation|screenSize”

監聽切換

@Override

​ public void onConfigurationChanged(Configuration newConfig) {

​ }

判斷 目前狀态

getResources().getConfiguration().orientation

Fragment 生命周期

Fragment建立對象并不會執行生命周期

使用FragmentManager時 :

Add生命周期:

開始

E/A—: onCreate

E/A—: onCreateView

E/A—: onViewCreated

E/A—: onActivityCreated

E/A—: onStart

E/A—: onResume

// 結束

E/A—: onPause

E/A—: onStop

E/A—: onDestroyView

E/A—: onDestroy

E/A—: onDetach

show和hide時 生命周期無變化

Replace方法切換時

​ E/B—: onCreate

​ E/A—: onPause

​ E/A—: onStop

​ E/A—: onDestroyView

​ E/A—: onDestroy

​ E/A—: onDetach

​ E/B—: onCreateView

​ E/B—: onViewCreated

​ E/B—: onActivityCreated

​ E/B—: onStart

​ E/B—: onResume

ViewPager + fragment

1) FragmentPagerAdapter和FragmentStatePagerAdapter

不同點: fragment 存儲、恢複、銷毀 的方式不同

2)顯隐監聽

setUserVisibleHint 生效

onHiddenChanged無效

FragmentPagerAdapter

1 初始化時生命周期

​ E/D—: onCreate

​ E/D—: onCreateView

​ E/D—: onViewCreated

​ E/D—: onActivityCreated

​ E/D—: onStart

​ E/D—: onResume

2 未銷毀時頁面切換不調用生命周期
3.1 銷毀時調用生命周期

E/A—: onPause

E/A—: onStop

E/A—: onDestroyView

3.2 銷毀再次建立(少一個onCreate)

​ E/A—: onCreateView

​ E/A—: onViewCreated

​ E/A—: onActivityCreated

​ E/A—: onStart

​ E/A—: onResume

4 新建立并銷毀一個

​ E/D—: onCreate

​ E/A—: onPause

​ E/A—: onStop

​ E/A—: onDestroyView

​ E/D—: onCreateView

​ E/D—: onViewCreated

​ E/D—: onActivityCreated

​ E/D—: onStart

​ E/D—: onResume

5 再次顯示時

​ E/A—: onCreateView

​ E/A—: onViewCreated

​ E/A—: onActivityCreated

​ E/D—: onPause

​ E/D—: onStop

​ E/D—: onDestroyView

​ E/A—: onStart

​ E/A—: onResume

6退出時生命周期

​ E/C—: onPause

​ E/C—: onStop

​ E/C—: onDestroyView

​ E/C—: onDestroy

​ E/C—: onDetach

FragmentStatePagerAdapter

1 初始化時正常周期(同上)
2 未銷毀時頁面切換不調用生命周期
3 銷毀時調用生命周期

E/A—: onPause

E/A—: onStop

E/A—: onDestroyView

E/A—: onDestroy

E/A—: onDetach

4 新建立并銷毀一個

E/D—: onCreate

E/A—: onPause

E/A—: onStop

E/A—: onDestroyView

E/A—: onDestroy

E/A—: onDetach

E/D—: onCreateView

E/D—: onViewCreated

E/D—: onActivityCreated

E/D—: onStart

E/D—: onResume

5 再次顯示時(同4)
6退出時生命周期(正常退出同3)