橫豎屏切換時候 activity 的生命周期?


1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次

2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次

3、設置Activity的android:configChanges="orientation

keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法


結論:

1.虛擬機和真機驗證結果不同

2.不同版本系統驗證結果不同

3.高版本(API
&>12)需要加入screenSize屬性,不然設置configChanges還是會重建

本次參加的運動員有:

真機:小米5s(API23),Nexus5(API24)

虛擬機:API10,API24

不設置 android:configChanges

API24虛擬機執行onConfigurationChanged方法,然後重建Activity

API10的虛擬機直接重建Activity

APi23的小米5s真機直接重建Activity

設置android:configChanges="orientation"

API24虛擬機執行onConfigurationChanged方法,然後重建Activity

API10的虛擬機執行onConfigurationChanged方法,不再重建Activity

APi23的小米5s真機直接重建Activity

設置android:configChanges="orientation|screenSize"

都只執行onConfigurationChanged方法,不重建Activity

設置android:configChanges="orientation|keyboardHidden"

API24虛擬機執行onConfigurationChanged方法,然後重建Activity

API10的虛擬機執行onConfigurationChanged方法,不再重建Activity

APi23的小米5s真機直接重建Activity

設置android:configChanges="orientation|keyboardHidden|screenSize"

都只執行onConfigurationChanged方法,不重建Activity


在默認情況下(不設置android:configChanges)時,切換橫豎屏,系統回調:

onSaveInstanceState()

onPause()

onDestroy()

然後重新生成一個你得Activity實例,再次調用:

onCreate() :注意此時savedInstanceState參數不為null,值為前一個生命周期在onSaveInstanceState中保存的數據

onStart()

onResume()


如果想實現所有activity橫屏,可以設置所有activity繼承一個父類,這個父類應該如何編寫,讓子activity只執行一遍


建議看看《pro android 2》這本書,很詳細。


推薦閱讀:

國內ROM哪些功能是原生Android不解鎖、Root做不到的?
Windows Phone 8.1 更新是否大幅縮小了與 iOS 和 Android 的差距?
CM(CyanogenMod)團隊為什麼可以解決那麼多機型的適配?
安卓適配為何比windows難?
努比亞高配星空灰 華為榮耀v9和一加3T高配槍灰色這3款手機選哪一款?

TAG:Android開發 | Android | Activity |