1.Android任务栈简介
1.Android系统,通过栈结构来保存整个App的Activity,栈底的元素是整个任务栈的发起者;
2.App启动的时候,如果当前环境中不存在该App的任务栈,那么系统就会创建一个任务栈,此后,这个App所启动的Activity都将在这个任务栈中被管理,这个栈也被称为一个Task,也就是若干个Activity的集合组成一个Task。要注意的是,一个Task中的Activity可以来自不同的App,也可以来自同一个App;
3.栈结构:先进先出的线性表。
2.AndroidMainifest启动模式
1.standard:默认的启动模式,如果不指定Activity的启动模式,则使用这种方式启动Activity。每次启动界面,都会创建一个新的实例处理任务栈顶部,当用户按下返回键或者调用finish()方法的时候,系统会移除栈顶部的Activity。
2.singleTop:启动时,系统会判断当前栈顶Activity是不是您要启动的Activity,如果是,则直接使用,如果不是,重新创建Activity。用于:接收到信息后显示的界面。但系统仍然会在创建Activity的时候调用onNewIntent()方法。
3.singleTask:与singleTop模式类似,只不过singleTop检查顶元素是不是需要启动的Activity,而singleTask是检测整个任务栈里面是否存在当前需要启动的Activity。如果存在,则将该Activity置于栈顶,并将该Activit以上的Activity都销毁了(针对的是同一个app),如果是其他程序以singleTask的模式来启动Activity,那么它将创建一个新的任务栈。
退出整个应用:将住Activity设置为singleTask模式,然后在要要退出的Activity中转到猪Activity,从而将主Activity之上的Activity都清除,然后重写主Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个Activity结束掉。
4.singleInstance:任务栈只存在一个Activity,如果应用A的任务栈中创建MainActivity实例,启动模式为singleInstance,如果应用B也激活MainActivity实例,则不需要创建,两个应用共享该Activity实例。常用于需要与程序分离的界面。
5.singleTop与singleInstance的区别:如果在一个singleTop或者singleInstance的Activity中通过startActivityForResult()方法来启动另一个ActivityB,那么系统将直接返回Activity.RESULT_CANCELED而不会再去等待返回。这是由于系统在Framework层做了对这两种启动模式的限制,因为Android开发者认为,不同Task之间,默认是不能传递数据的,如果一定要传递,那就只能通过Intent来绑定数据。