1. 程式人生 > >Android Activity 橫豎屏模式切換時會被destroy的問題

Android Activity 橫豎屏模式切換時會被destroy的問題

眾所周知,在Activity中加入android:screenOrientation="portrait"屬性可以使Activity保持豎屏的狀態,但是最近發現貌似在呼叫一些橫屏Activity返回時偶爾會有橫屏事件產生(比如在上一個Acitivty finish()前彈Toast,出現瞬間橫屏的概率很高,原因還沒找到.....),導致Acitvity被Destroy掉,然後重新onCreate()一次,之前的很多資料會被重新初始化。

上網搜了一下,發現只要在Activity屬性中再加上android:configChanges="orientation"屬性就可以由Acitivity自己來處理方向變化的事件,而不是由framework來處理。

如果需要處理,需要在Activity中重寫一下onConfigurationChanged()方法。當然,如果不需要自己處理,則不需重寫方法,這樣可以避免Activity在由另外的橫屏Activity切回時被Destroy掉。

讓Android橫豎屏切換時不銷燬當前activity

首先在Mainifest.xml的Activity元素中加入android:configChanges

="orientation|keyboardHidden"屬性


加入這條屬性的含義是,應用程式將會處理螢幕方向和鍵盤狀態(推出或合上)資訊的改動。但對於其他的裝置配置資訊的改動則會由Android系統來處理(銷燬當前Activity,然後重啟一個新的Activity例項)。

那麼,現在還需要在java程式碼的activity子類中加入配置資訊改動的處理程式碼。這個也很簡單

/**
* onConfigurationChanged
* the package:android.content.res.Configuration.
* @param newConfig, The new device configuration.
* 當裝置配置資訊有改動(比如螢幕方向的改變,實體鍵盤的推開或合上等)時,
* 並且如果此時有activity正在執行,系統會呼叫這個函式。
* 注意:onConfigurationChanged只會監測應用程式在AnroidMainifest.xml中通過
* android:configChanges="xxxx"指定的配置型別的改動;
* 而對於其他配置的更改,則系統會onDestroy()當前Activity,然後重啟一個新的Activity例項。
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); // 檢測螢幕的方向:縱向或橫向
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
 //當前為橫屏, 在此處新增額外的處理程式碼
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
//當前為豎屏, 在此處新增額外的處理程式碼
}
 //檢測實體鍵盤的狀態:推出或者合上
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO){
//實體鍵盤處於推出狀態,在此處新增額外的處理程式碼
} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES){
 //實體鍵盤處於合上狀態,在此處新增額外的處理程式碼
}
}

這樣就OK了,螢幕方向改變時,應用程式的顯示介面也會隨著改動,而不是被銷燬