天天看點

橫豎屏切換時重構Activity生命周期的問題---android:configChanges的用法

最近在做平闆的app項目,之前隻記得Activity生命周期重構方法,但是不管用,後來才發現4.0以上的系統需要加上另外一個屬性,希望大家共勉!!! android:configChanges,這個方法主要是負責列出清單,當清單上使用者指定的設定改變時,Activity會自己處理這些變化。  orientation,螢幕界面旋轉(可能是使用者手動旋轉的) 【注意:如果你的開發API等級等于或高于13,你還需要設定screenSize,因為screenSize會在螢幕旋轉時改變】

4.0以下系統需要清單檔案中設定  <activity             android:name="Activity的全路徑名"             android:configChanges="orientation|keyboardHidden" >//不重構生命周期   </activity>

橫豎屏切換時重構Activity生命周期的問題---android:configChanges的用法

4.0以上系統的需要在清單檔案裡面設定 <activity              android:name="Activity的全路徑名"             android:configChanges="orientation|keyboardHidden|screenSize" >//不重構生命周期  </activity>

橫豎屏切換時重構Activity生命周期的問題---android:configChanges的用法

當設定以上屬性的時候Activity生命周期不會重構,但是會執行該Activity的onConfigurationChanged

public void onConfigurationChanged(Configuration newConfig) { 

        try { 

            super.onConfigurationChanged(newConfig); 

            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 

                Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE"); 

            } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 

                Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT"); 

            } 

        } catch (Exception ex) { 

        } 

    } 

當指定的屬性發生變化時,不會去重新啟動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" 螢幕的實體大小改變了,如:連接配接到一個外部的螢幕上