1. 程式人生 > >Android8.0下切換橫豎螢幕時Activity的生命週期。

Android8.0下切換橫豎螢幕時Activity的生命週期。

一、前言

看了一些關於切換螢幕時Activity生命週期變化的部落格,初步理解了切換螢幕時的變化過程(私以為,預設情況下之所以切換橫豎屏時會重新載入活動,是為了更好的使用者體驗哈哈)。但是因API版本號以及收集型號的不一樣,這個過程都會略有不同。——————>所以我現在比較新的8.0系統下測試一番。

二、測試環境

安卓版本:android 8.0—API26
手機型號:Nexus_5X
編譯環境:Android Sdudio

三、預設情況下的手機旋轉(不配置android:configChanges屬性)

首先是豎屏啟動:

這裡寫圖片描述
可以看到,流程為:onCreate—–>onStart—–>onResume。這根安卓以前的API啟動流程一致。

再切換為橫屏:

這裡寫圖片描述
從圖中可以看出,重新呼叫了一次生命活動週期。onPause——-onSaveInstanceState——-onStop——-onDestroy——–onCreate——onStart——onRestoreInstanceState——onResume

最後切換回豎屏(重點)

很多資料上說,這個過程會載入兩次生命週期,然而在API26下的情況並非如此

這裡寫圖片描述

這裡根切換為橫屏時一毛一樣!只加載了一次生命週期。

四、配置android:configChanges="orientation"時生命週期變化

注意:該配置應該寫在AndroidMainifest.xml的< activity 裡.。

這裡寫圖片描述

同樣的,豎屏下啟動:

這裡寫圖片描述
可以看到,流程為:onCreate—–>onStart—–>onResume。這根第三節的啟動流程一致。

然後切換為橫屏:

這裡寫圖片描述
這兒並沒有執行生命週期,只回調了onConfigurationChanged方法,這跟以前的API不一樣,以前的是會重新載入一次活動的。

最後切換回豎屏

這裡寫圖片描述
這兒也並沒有執行生命週期,只回調了onConfigurationChanged方法。這跟以前的API不一樣,以前的是會重新載入一次活動的。

五、配置android:configChanges="orientation|keyboardHidden"

這裡寫圖片描述
執行完旋轉再轉回豎屏後,列印資訊如上,這和第四節一致,旋轉螢幕時不呼叫生命週期。

六、配置android:configChanges="orientation|keyboardHidden|screenSize"

這裡寫圖片描述
執行完旋轉再轉回豎屏後,列印資訊如上,這和第四節一致,旋轉螢幕時不呼叫生命週期。

七、總結

在Android8.0環境下。當不設定android:configChanges屬性時,旋轉螢幕會進行一次生命週期迴圈(即重新載入一次Activity),而一旦配置了該屬性後,旋轉螢幕就只會呼叫onConfigurationChanged()方法。