轉屏時,配置了android:configChanges="keyboardHidden|orientation"html
仍是會調用oncreate ,原來是由於沒有配置screensize屬性致使。android
如此這般,仍是不起做用啊,原來5.1的還要添加上權限,以下:web
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"
></uses-permission>
app
經歷如此折騰,終於好了函數
參考:http://blog.csdn.net/huiguixian/article/details/8071821ui
在之前的版本中只要在AndroidManifest.xml文件中對activity指定android:configChanges="keyboardHidden|orientation"屬性,轉屏的時候就會再也不從新調用OnCreate()函數,而是調用onConfigurationChanged()。this
可是在自從android3.2之後,再這樣設置的話,會發現轉屏後仍然會調用OnCreate(),而不是onConfigurationChanged();跟蹤framework層代碼,就會發現問題所在,是因爲google在android3.2中添加了screensize改變的通知,在轉屏的時候,不只是orientation發生了改變,screensize一樣也發生了改變,而在判斷是調用onConfigurationChanged仍是OnCreate時,採用的是以下判斷:google
int diff = activity.mCurrentConfig.diff(config);spa
if (diff != 0) { .net
// If this activity doesn't handle any of the config changes then don't bother calling onConfigurationChanged as we'regoing to destroy it.
if ((~activity.mActivityInfo.getRealConfigChanged() & diff) == 0) {
shouldChangeConfig = true;
}
}
public int getRealConfigChanged() {
return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
| ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) : configChanges;
}
經過上面的分析,可發現有兩種方法解決該問題:(只須要修改AndroidManifest.xml)
1.指定android:configChanges="keyboardHidden|orientation|screenSize",其餘的代碼和之前的代碼同樣處理;
2.在AndroidManifest.xml中指定targetSdkVersion爲3.2之前的版本(3.2的版本號爲13),系統會自動加上screenSize屬性值。
好比:<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="12" />
建議使用第一種方法。
參考 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1106/516.html