singleTask:栈内复用模式。
Activity在整个应用程序中只存在一个实例,每次启动该activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,系统也会回调onNewIntent。并将当前activity之上的所有activity出栈,如果没有发现则创建一个新的实例
singleTask模式的activity切换到栈顶会导致在它之上的栈内的activity出栈
举几个例子:·
1 比如目前任务栈S1中的情况为ABC,这个时候Activity D以singleTask模式请求启动,其所需要的任务栈为S2,由于S2和D的实例均不存在,所以系统会先创建任务栈S2,然后再创建D的实例并将其入栈到S2。·
2 另外一种情况,假设D所需的任务栈为S1,其他情况如上面例子1所示,那么由于S1已经存在,所以系统会直接创建D的实例并将其入栈到S1。
3 如果D所需的任务栈为S1,并且当前任务栈S1的情况为ADBC,根据栈内复用的原则,此时D不会重新创建,系统会把D切换到栈顶并调用其onNewIntent方法,同时由于singleTask默认具有clearTop的效果,会导致栈内所有在D上面的Activity全部出栈,于是最终S1中的情况为AD。
点击mainActivity按钮,再点击BAty按钮 ,mainActivity只存在一个,而且点击back键后直接退出