LaunchMode应用场景

一共有以下四种 launchMode:standard、singleTop、singleTask 、singleInstance、

(1)standard:系统的默认模式:每次启动都会创建一个新的activity 对象(一次跳转即会生成一个新的实例),放到目标任务栈中。一次跳转即会生成一个新的实例。平时我们默认使用的就是这种模式。

(2)singleTop:判断当前的任务栈顶是否存在相同的 activity对象,如果存在,则直接使用,如果系统发现存在有 Activity 实例, 但不是位于栈顶,重新生成一个实例。;如果不存在,那么创建新的activity 对象放入栈中,如果打开的 activity 在栈顶,调用。onNewIntent 方法 ,从 onResume()开始

适用范围:适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到 10 个新闻推送,每次都打开一个新闻内容页面是很烦人的。

(3)singleTask:在任务栈中会判断是否存在相同的 activity,如果存在,那么会清除该 activity 之上的其他 activity 对象显示;如果不存在,则会创建一个新的 activity 放入栈顶。当打开的activity存在于栈内,将其上方的activity都销毁掉,使此Activity实例成为栈顶对象,显示到幕前,调用 onNewIntent 方法 ,从onResume()开始。

适用范围:适合作为程序入口点。 例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走 onNewIntent,并且会清空主界面上面的其他页面。

(4)singleIntance : 会 在 一 个 新 的 任 务 栈 中 创 建activity,并且该任务栈种只允许存在一个 activity 实例,其他调用该 activity 的组件会直接使用该任务栈中的 activity对象。与其他 activity 是独立的,它有自己的上下文 activity。将 Acitvity 放置于这个新的栈结构中,并保证不再有其他 Activity 实例进入。

适用范围:界面分离。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

猜你喜欢

转载自blog.csdn.net/github_37130188/article/details/89199276