android:configChanges
Android:configChanges=[mcc,mnc,locale,touchscreen,keyboard,keyboardHidden,navigation,screenLayout,fontScale,uiMode,
orientation,screenSize,smallestScreenSize]
程式在運作時,一些裝置的配置可能會改變,如:橫豎屏的切換、鍵盤的可用性等,這樣的事情一發生,Activity會重新啟動,其中的過程是:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jNwADOzIDM0ETNwkDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
其 OnPasuse 、onStop 、onDestroy 方法均被調用。onSaveInstanceState 方法會在onStop之前執行,它和onPause沒有特定順序,可前可後。
在銷毀之前會先 called onSaveInstanceState()去儲存你應用中的一些資料,然後called onDestroy(),最後才去called onCreate()或onRestoreInstanceState()方法去重新啟動Activity。
當指定的屬性後,屬性發生變化時,不會去重新啟動Activity,而是通知程式去調用 onConfigurationChanged()函數 例如:在進行橫豎屏的切換時,會重新啟動Activity,而定義了這個屬性,就不會重新啟動Activity了,而是去調用 onConfigurationChanged()函數。
可以設定多個屬性,中間用|隔開
VALUE | DESCRIPTION |
"mcc" | 國際移動使用者識别碼所屬國家代号是改變了----- sim被偵測到了,去更新mcc mcc是移動使用者所屬國家代号 |
"mnc" | 國際移動使用者識别碼的移動網号碼是改變了------ sim被偵測到了,去更新mnc MNC是移動網号碼,最多由兩位數字組成,用于識别移動使用者所歸屬的移動通信網 |
"locale" | 位址改變了-----使用者選擇了一個新的語言會顯示出來 |
"touchscreen" | 觸摸屏是改變了------通常是不會發生的 |
"keyboard" | 鍵盤發生了改變----例如使用者用了外部的鍵盤 |
"keyboardHidden" | 鍵盤的可用性發生了改變 |
"navigation" | 導航發生了變化-----通常也不會發生 |
"screenLayout" | 螢幕的顯示發生了變化------不同的顯示被激活 |
"fontScale" | 字型比例發生了變化----選擇了不同的全局字型 |
"uiMode" | 使用者的模式發生了變化 |
"orientation" | 螢幕方向改變了 |
"screenSize" | 螢幕大小改變了 |
"smallestScreenSize" | 螢幕的實體大小改變了,如:連接配接到一個外部的螢幕上 |
public void onConfigurationChanged(Configuration newConfig) {
try {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.v("Main", "onConfigurationChanged_ORIENTATION_LANDSCAPE");
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.v("Main", "onConfigurationChanged_ORIENTATION_PORTRAIT");
}
} catch (Exception ex) {
}
}
橫豎屏切換,禁止重建Activity
android:configChanges="orientation|keyboardHidden|screenSize"