Android中configChanges與固定螢幕方向不要共存
為了固定app的螢幕方向, android中經常在Manifest中有如下程式碼:
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
configChanges屬性是為了告訴android系統, 這些情況下導致的activity重建您就不要自作主張了,我的app會自己處理, 這時就會去呼叫activity中的onConfigurationChanged函式(如果重寫了並且在manifest中加入了CHANGE_CONFIGURATION許可權的話).
screenOrientation屬性是為了告訴android系統, 我的activity就是固定為垂直方向, 不要給我亂改.
很多人為了確保app保持垂直的方向, 會把這兩個屬性一起寫, 其實只寫screenOrientation就可以了, 多寫configChanges屬性不僅是畫蛇添足, 而且會降低繪製效率.
在不多加configChanges的情況下, 螢幕翻轉時, activity永遠不會被重建, 就當螢幕翻轉沒發生一樣.
在多加configChanges的情況下, 首先, onConfigurationChanged並不會被呼叫到, 也就是說這部分程式碼是無用的, 第二, 在普通的螢幕翻轉的情況, 由於screenOrientation的作用, activity不會被重建也不會被翻轉. 這裡沒有問題. 第三, 當前activit A開啟另外一個activity B, B將螢幕設定為橫屏時, 雖然不會導致A的重建, 但會導致A的介面重新排布, 這時有可能會出一些奇怪的bug, 比如獲取到的View還是橫屏的大小, 然後按照這個大小進行繪製, 回到豎屏時就錯誤了.
結論是: 只寫android:screenOrientation="portrait" 即可.