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 的話,都要自行處理。
最後結論為,可以的話,還是不要碰這一部份。