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

来源:互联网 发布:健身软件推荐 编辑:程序博客网 时间:2024/06/11 23:40

  最近遇到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> 

原创粉丝点击