安卓开发的一个坑。
程序MainActivity是单例模式android:launchMode="singleInstance" ,但是在某些手机下,会出现窗体被销毁然后重新创建的情况(onCreate和onDestroy)被调用两次
尤其是可能在电信手机卡下出现问题,原因在于系统启动后,搜索可用网络,当搜索到可用网络后,发现可用网络与系统默认的网络不一样(mcc,mnc)变了,就会发出一个通知,但窗体没有处理的话,就会被销毁并重新创建了,导致重复两次。
记得,不光是mcc,mnc变化会引起窗体,其他的配置如果你不处理,也会出现类似问题。
解决方法,在AndroidManifest.xml中,相关的activity部分,例如mainactivity中增加configChanges代码:
<activity android:name=".MainActivity"
android:configChanges="mcc|mnc|orientation|keyboardHidden"
android:launchMode="singleInstance">
然后重载窗体的onConfigurationChanged,处理一下即可:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
}
else if (this.getResources().getConfiguration().orientation
== Configuration.ORIENTATION_PORTRAIT) {
}
if (newConfig.hardKeyboardHidden
== Configuration.HARDKEYBOARDHIDDEN_NO){
}
else if (newConfig.hardKeyboardHidden
== Configuration.HARDKEYBOARDHIDDEN_YES){
}
}