在以前的版本中只要在AndroidManifest.xml文件中对activity指定android:configChanges="keyboardHidden|orientation"属性,转屏的时候就会不再重新调用OnCreate()函数,而是调用onConfigurationChanged()。


但是在自从android3.2以后,再这样设置的话,会发现转屏后仍然会调用OnCreate(),而不是onConfigurationChanged();跟踪framework层代码,就会发现问题所在,是由于google在android3.2中添加了screensize改变的通知,在转屏的时候,不仅是orientation发生了改变,screensize同样也发生了改变,而在判断是调用onConfigurationChanged还是OnCreate时,采用的是如下判断:

int diff = activity.mCurrentConfig.diff(config);if (diff != 0) {                // 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" />





建议使用第一种方法。



onConfigurationChanged not getting called


Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in addition to the "orientation" value. That is, you must decalare android:configChanges="orientation|screenSize". However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).


(From http://developer.android.com/guide/topics/resources/runtime-changes.html)


http://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called

更多相关文章

  1. Android学习笔记50:使用WebView控件浏览网页
  2. android 数据储存——ContentProvider(4)
  3. 《Android(安卓)Fragment 非常详细的一篇》
  4. android 禁止编辑框可编辑,使其自动调用搜狗输入法
  5. FFmpeg之一编译ForAndroid
  6. Android项目复盘3
  7. Android中BaseAdapter的用法分析与理解
  8. Android(安卓)之 getSharedPreferences 和 getPreferences
  9. 实战试用 Android(安卓)NDK 初见成效

随机推荐

  1. [转]android Android(安卓)SDK Setup的使
  2. Android(安卓)关于休眠的几个坑点
  3. AVD(android virtual device )路径设置
  4. SlidingDrawer
  5. android的主题
  6. android的Handler
  7. Android输入法框架中按键消息的处理流程
  8. Android自动化工具Appium的使用
  9. 在 Mac OS X 下使用 Android(安卓)NDK r5
  10. android通过手机本身来获取经纬度等信息(