Quick Note: Android Runtime Change
為免自己忘記,所以短短的快寫一篇,記下來。
Android 的 Runtime Change,即 App 運行時的裝置轉變,常見於螢幕旋轉、keyboard 彈出等。當這些情況出現時,Activity 會被 onDestory(),然後會以新的 "configuration" 執行 onCreate()。
若無特別註明,Android 會自動處理 runtime change 。但若想自行處理的話 (如橫向螢幕時,可在 Activity 中 override onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
除了這樣,還要在 AndroidManifest.xml 中註明你的 activity 會自行處理:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name">
這裡的重點是 screenSize ,在 Android 3.2 (API level 13) 以上必須包括在內,否則 onConfigurationChanged() 不會被執行。這點著實費了我一點時間才理解到 (Android doc 為什麼不將這點直接寫在 sample code 上而寫在文字中呢?)。
另外,自行處理 runtime change 代表 activities 不會被系統殺掉後再重生,而是直接執行 onConfigurationChanged() ,所以如果改變 layout 的話,都要自行處理。
最後結論為,可以的話,還是不要碰這一部份。