android:launchMode="singleTask"
和代码设置intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK)
的区别?
在使用taskAffinity为默认包名时:singleTask并不会额外创建任务栈,而是在当前任务栈中创建实例,如果当前任务栈有实例则会清空该实例之上的Activity并走该实例的onNewIntent()方法,FLAG_ACTIVITY_NEW_TASK同样不会创建新任务栈,区别在这种情况下不会去判断当前栈中的实例,而是直接创建新的实例
在使用定义了taskAffinity非默认包名或从其他应用打开时:这显然都属于启动Activity与目标Activity不属于同一个栈,在这种情况下两者并无区别,先先去查看目标栈是否存在Activity实例,存在则直接走onNewIntent,不存在就创建新任务栈,并创建新的Activity实例
注:如果singleTask和FLAG_ACTIVITY_NEW_TASK同时定义,则按照singleTask的效果展示