昨天同事无意间碰到了这样一种情况,在浏览器中安装app后打开然后按下home键,这时再在桌面点击app图标打开,发现应用重启了,然后多次点击图标每次都重启,问我为什么会出现这样的问题,私下仔细揣摩了下找到了解决办法,以此记录下:
首先找到manifest中带有:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
这段代码声明的activity,这是app启动的第一个activity,然后在这个activity的oncreate方法中添加如下判断:
if (!this.isTaskRoot()) {
Intent intent = getIntent();
if (intent != null) {
String action = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
finish();
}
}
}
首先判断该activity是否是根activity(第一个启动的activity),然后回去intent,判断intent中是否带有CATEGORY_LAUNCHER和ACTION_MAIN,如果有就认为是从桌面启动的app,如果后台有已经存在的任务栈,就会把这个任务栈从后台移到前台展示,如果后台没有该app的任何任务栈就会跳过这段代码重新启动app。