Activity被系统重启

双卡双待手机,开启飞行模式或者关闭飞行模式时,Activity被系统重启了。原因就和屏幕旋转一样,因为触发了MCC或者MNC
  <activity
            android:name="com.test.MainActivity"
            android:launchMode="singleTask"
            android:configChanges="orientation|keyboardHidden|mcc|mnc"
            android:windowSoftInputMode="stateHidden"
  android:configChanges="orientation|keyboardHidden|mcc|mnc"

为什么双卡双待手机会引起这样的问题,要从IMSI说起。

国际移动用户识别码,即IMSI(International Mobile Subscriber Identity),它是在公众陆地移动电话网(PLMN)中用于唯一识别移动用户的一个号码。在GSM网络,这个号码通常被存放在SIM卡中。

从技术上讲,IMSI可以彻底解决国际漫游问题。但是由于北美目前仍有大量的AMPS系统使用MIN号码,且北美的MDN和MIN采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以MIN为主。其中以O和1打头的MIN资源称为IRM(International Roaming MIN),由IFAST (International Forum on ANSI-41 Standards Technology)统一管理。目前联通申请的IRM资源以09打头。可以看出,随着用户的增长,用于国际漫游的MIN资源将很快耗尽,全球统一采用IMSI标识用户势在必行.

IMSI共有15位,其结构如下:

MCC+MNC+MIN

MCC:Mobile Country Code,行动装置国家代码,共3位,中国为460;

MNC:Mobile Network Code,移动设备网络代码,2位(欧洲标准)或3位(北美标准),中国电信CDMA系统使用03,一个典型的IMSI号码为460030912121001;

MIN共有10位,其结构如下:

09+M0M1M2M3+ABCD

其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。

可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.

描述
"mcc"

The IMSI mobile country code (MCC) has changed — a SIM has been detected and updated the MCC.
IMSI移动国家代码(MCC)已经改变了- SIM已经发现和更新了MCC。
"mnc" The IMSI mobile network code (MNC) has changed — a SIM has been detected and updated the MNC.
IMSI移动网络的代码(跨国公司)已经改变- SIM卡被发现和更新了跨国公司。
"locale" 用户改变了系统的语言,比如由中文切为英文。
"touchscreen" 触摸屏发送了改变(正常情况一般不会出现)
"keyboard" 当键盘类型发送改变,比如用户外接了一个USB键盘。
"keyboardHidden" 键盘可见性发生改变,比如有些手机有物理键盘(原来就有,只是不可见),当物理键盘被抽成或者滑出时。
"navigation" 导航类型发送了改变(由trackball轨迹球在dpad中发送切换)正常情况是不会出现的。
"screenLayout" The screen layout has changed — this might be caused by a different display being activated.
"fontScale" 字体大小改变,用户在设置中改变了全局的字体大小,比如启用了老年模式。
"uiMode" The user interface mode has changed — this can be caused when the user places the device into a desk/car dock or when the night mode changes. See UiModeManagerAdded in API level 8.
"orientation" 屏幕方向发生变化,也就是用户旋转了手机。如果targets API高于13,还需要配置screenSize才行
"screenSize" 屏幕旋转时触发,或者屏幕比例变化。如果targets API低于13,不配置这个也不会导致ACTIVITY重启。
"smallestScreenSize"

物理尺寸变化。比如当手机连接电视,让电视当显示器。在API13时增加,如果targets API低于13,不配置这个也不会导致ACTIVITY重启。

"layoutDirection" 屏幕的方向比横竖屏切换更具体,横屏也有两种情况,返回键在左边,或者在右边。这个就是告诉你返回键在左边还是右边。可惜API 17以后才有。





你可能感兴趣的:(网络,运营商,Activity重启)