Android之Input子系统配置更新导致的Activity重启

  最近遇到2.4G模组(这些都是有键盘设备注册的)接入、有线键盘接入和输入法中英文切换后引起的UI重启问题;现转载如下博文,后边在对其做源码分析。

  转载:http://blog.csdn.net/jkkjklmn/article/details/7349517

  http://blog.csdn.net/jivin_shen/article/details/6839175

1.可能引起Activity重启的一些属性

"mcc" 国际移动用户识别码所属国家代号是改变了-----  sim被侦测到了,去更新mcc    mcc是移动用户所属国家代号
"mnc" 国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc    MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
"locale" 地址改变了-----用户选择了一个新的语言会显示出来
"touchscreen" 触摸屏是改变了------通常是不会发生的
"keyboard" 键盘发生了改变----例如用户用了外部的键盘
"keyboardHidden" 键盘的可用性发生了改变
"navigation" 导航发生了变化-----通常也不会发生
"screenLayout" 屏幕的显示发生了变化------不同的显示被激活
"fontScale" 字体比例发生了变化----选择了不同的全局字体
"uiMode" 用户的模式发生了变化
"orientation" 屏幕方向改变了
"screenSize" 屏幕大小改变了
"smallestScreenSize" 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

2.应用程序AndroidManifest.xml中的android:configChanges属性

  在android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置。在activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity。而只是调用onConfigurationChanged(Configuration newConfig)。这样就可以在这个方法里调整显示方式。

3.实例

应用程序Activity中实现的onConfigurationChanged方法:

public void onConfigurationChanged(Configuration newConfig) {    
  try {    
    super.onConfigurationChanged(newConfig);    
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {    
      Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE");    
    } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {    
      Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT");    
    }    
  } catch (Exception ex) {    
  }    
} 

AndroidManifest.xml中的属性设置:

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.himi" android:versionCode="1" android:versionName="1.0">  
    <application android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".MainActivity" android:label="@string/app_name"  
            android:configChanges="keyboardHidden|orientation">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  
    <uses-sdk android:minSdkVersion="4" />  
</manifest> 

你可能感兴趣的:(Android之Input子系统配置更新导致的Activity重启)