修复Android App在开机后入口类被启动两次的bug
16lz
2021-01-23
现象描述
这是一个横屏的App,AndroidManifest中配置了 shareUserId
android:sharedUserId="android.uid.system"
添加了开机启动广播
public class BootBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { Intent i = new Intent(context, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }}
MainActivity配置了launchMode
<activity android:name="yqgj.ui.MainActivity" android:screenOrientation="landscape" android:windowSoftInputMode="stateHidden|adjustResize" android:launchMode="singleTask" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
此App装在了车载的一体机(Android4.4系统),当一体机开机后,App随之启动并到前台,此时通过log打印发现
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("重复OnCreate()");}
重复OnCreate()打印了两次,中间间隔5秒左右,之后所有onCreate里的方法都执行了两次
解决之道
1、有人说是因为横竖屏转换导致oncreate被执行了两次,检查了代码,发现程序里有用到高德离线地图
<activity android:name="com.amap.api.maps.offlinemap.OfflineMapActivity" android:screenOrientation="portrait" />
于是把这个portrait改成了landscape,重新测试下无效,因为根本都不会打开这个OfflineMapActivity
2、横竖屏转换时要添加configChanges的配置
android:configChanges="orientation|keyboardHidden"
测试下来无效
3、还有人说用其他的启动模式,要这么说,相对而言也就singleInstance稍微合适了,测试下来也无效
正确方法
在主Activity配置清单中添加configChanges,原因是mcc值会发生变化,至于为啥会发生变化,不得而知
android:configChanges="mcc|mnc"
添加此配置后,即使mcc或者mnc发生变化,也不会重启
详情可参考博文 Launcher Activity在开机时重启两次解决办法
更多相关文章
- Android 单元测试小总结
- 【android测试】值得学习的android测试知识连接
- 使用uiautomatorviewer和uiautomator来做android的UI测试
- 使用Android Instrument 自动测试 WIFI_SERVICE
- [android]android性能测试命令行篇
- Android Junit 单元测试步骤
- Android AGPS 定位 测试程序
- Android 自动化测试工具Robotium 之Solo类的详细说明
- 【Android Camera】Android层测试摄像头实际输出帧率