参考:https://www.cnblogs.com/itrena/p/7434174.html
https://blog.csdn.net/csdn_of_coder/article/details/76343031
1.用FLAG_ACTIVITY_CLEAR_TOP 实现清空Activity栈:
能够清空此栈之前的Activity,清空在即将跳转的activity之前的栈,所以此activity要设置成singline模式。
跳转时候把他之前的栈都清掉
/**
* 清空跳转Activity之前的栈
*
* @param clz
*/
public void startClearTopActivity(Class<?> clz) {
startActivity(new Intent(BaseActivity.this, clz).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}
2.FLAG_ACTIVITY_NO_HISTORY
在AndroidManifest.xml设置Activity的属性noHistory = true,
当启动新的Activity后之前的Activity不会保存在ActivityTask中,可以满足你的需求。
<activity
android:name=".activity.ServiceActivity"
android:noHistory="true" />
或
Intent.setFlags(FLAG_ACTIVITY_NO_HISTORY)
栈中完全不存放任何activity,每一个都是新生成的。
3.FLAG_ACTIVITY_CLEAR_TASK:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
这个标记,将会导致任何用来放置该activity的已经存在的task里面的已经存在的activity先清空,然后该activity再在该task中启动,也就是说,这个新启动的activity变为了这个空task的根activity.所有老的activity都结束掉。该标志必须和FLAG_ACTIVITY_NEW_TASK一起使用。