先讲两个Intent的标记:
Intent.FLAG_ACTIVITY_NEW_TASK:
设置此状态,首先会查找是否存在 与被启动的Activity具有相同的亲和性的任务栈(即被启动的Activity是否创建过,创建过则存在)。
如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变
如果没有,则新建一个栈来存放被启动的activity
Intent.FLAG_ACTIVITY_CLEAR_TASK:
如果在通过Context.startActivity()启动activity时为Intent设置了此标识,这个标识将导致:在此activity启动之前,任何与此activity相关联的task都会被清除。也就是说,此 activity将变成一个空栈中新的最底端的activity,所有的旧activity都会被finish掉,这个标识仅仅和FLAG_ACTIVITY_NEW_TASK联合起来才能使用。
在非MainActivity中完全退出应用 只需要使用这两个标记就可以。
案例: 引导页面A 结束后 跳转 main页面B ,在main页面中监听back按键完全退出应用。
之前没有使用这两个Flag ,每次在main页面中System.exit(0) 或 finish()都返回引导页面中,不能直接退出应用。
原理:
利用task的特性(先进后出),在引导页跳转main页时 将已存在task清空 ,随后mainActivity将被放到task最底部。所以在mainActivity 中调用finish()或System.exit(0)时 直接退出整个应用
A –> B:只需要在跳转时 对intent设置 Flags即可
Intent intent = new Intent();
intent.setClass(A.this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);