在切換屏幕方向的時候,Activity默認會走銷燬->重建的生命週期,而有時候咱們不但願如此,就須要作些額外的設置了:html
一、在AndroidMainifest.xml中對應的Activity標籤中加入android:configChanges="keyboardHidden|orientation|screenSize"屬性,例:android
1 <activity 2 android:name=".view.TestActivity" 3 android:configChanges="keyboardHidden|orientation|screenSize" />
這裏是指定當keyboardHidden、orientation、screenSize這三種狀態發生改變時,由咱們的程序進行處理,而不是走系統的銷燬->重建操做;另外,screenSize是在Api13+要求加上的;ide
二、重寫Activity的onConfigurationChanged方法,例:this
1 @Override 2 public void onConfigurationChanged(Configuration newConfig) { 3 super.onConfigurationChanged(newConfig); 4 // 當前爲橫屏 5 if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 6 7 } 8 // 當前爲豎屏 9 else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 10 11 } 12 }
在此方法中,咱們能夠根據前面設置的keyboardHidden、orientation、screenSize這三種狀態,判斷並執行想要的操做,固然什麼都不作也能夠;spa
就這兩步,問題已經解決了,每次切換屏幕方向將不會對Activity的生命週期形成影響,只會走onConfigurationChanged方法。可是!!!我碰到了個很神奇的東西:code
Activity1跳轉到了Activity2,而且Activity2已經作了如上處理,當旋轉屏幕時,Activity2的確按照預想的執行,可是Log中怎麼出現了Activity1的銷燬->重建,這提莫就想不通了,通過一番地毯式查找,終於發現緣由在Activity2的Theme屬性中設置了<item name="android:windowIsTranslucent">true</item>,透明的Activity2致使了Activity1的重繪,因此去掉就行了,不知道這是否是windowIsTranslucent的一個bug,記得在其餘地方好像也碰到過相似的後臺Activity被重繪的問題,也是windowIsTranslucent的鍋。xml
閱讀原文htm