Android Intent Flag
Android Intent 常用的Flag有以下几种:
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_SINGLE_TOP
- FLAG_ACTIVITY_CLEAR_TASK
Flag一般是组合使用。本文的结论需要增加一个前提,所有添加Flag启动的Activity本身的launch mode都是standard模式。
误区:很多同学认为(FLAG_ACTIVITY_NEW_TASK | FLAG_ACITIVTY_CLEAR_TOP)的组合使用能让普通的Activity以singleTask模式启动,这是错误的。普通的Activity以singleTask模式启动需要使用(FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACITIVTY_CLEAR_TOP)
Intent Flag组合
FLAG_ACTIVITY_NEW_TASK和FLAG_ACITIVTY_CLEAR_TOP
效果:如果栈中存在该Activity,那么则将要跳转的Activity及其之上的Actviity全部清除,然后将创建要跳转的Activity放入栈中。因为跳转的Activity是重新创建的,所以不会走onNewIntent方法。
FLAG_ACTIVITY_NEW_TASK和FLAG_ACITIVTY_CLEAR_TASK
效果:跳转Activity所在的任务栈中所有Activity全部清除,然后创建要跳转的Activity并放入栈中。
FLAG_ACTIVITY_SINGLE_TOP和FLAG_ACTIVITY_CLEAR_TOP
效果:如果跳转Activity所在的任务栈中存在该Activity,那么将该Activity以上的Activity全部清除,然后调用跳转Activity的onNewIntent()方法。
这种组合方式等同于singleTask的launchMode模式。