Activity 启动模式 及 区别

  • Standard:默认启动模式,每次都会在虚拟栈顶创建一个实例。
  • SingleTop:检查该 Activity 的实例是否位于栈顶,位于栈顶时复用,非栈顶时创建新实例。
  • SingleTask:该 Activity 在目标栈中只存在一个实例,启动此 Activity 时会检查虚拟栈中是否存在它的实例,如果存在直接复用,并把当前Activity之上所有实例全部出栈。
  • SingleInstance:具备 singleTask 模式的所有特性。该模式的 Activity 会启动一个新的任务栈来管理 Activity 实例,并且该实例在整个系统中只有一个。无论从那个任务栈中启动该 Activity,都会是该 Activity 所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个 Activity 实例。

启动模式的应用场景

singleTop:就是栈顶只有一个instance。

适合 接受推送消息的展示页

某些本应只展示一个的场景,比如一下子收到一堆推送消息,不能每个都弹出来吧。但凡是这样的都行。优酷的推荐视频,电商app推送一个活动。

singleTask:顶上不是target Activity,移除target之上的,把自己变成top。

适合程序入口,不需要启动后activity的

是的,只能用在启动页了吧,首页,这种只允许有一个instance,如果有其他就移除掉它顶上的。从这个Activity进入的其他activity都抛弃掉了。用户要再操作一次。

singleInstance的特性是 完全同程序分离。完全独立运行的。

同样的也要想清楚再用。

适合需要与程序分离开的页面。

这种页面包括,闹钟的提示框。

===============================================

standard 标准模式 :

每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否以及存在,此模式的Activity默认会进入启动它的Activity所属的任务栈中。

应用场景:默认的应用场景

singleTop 栈顶复用模式:

如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时会回调onNewIntent方法,如果新Activity实例已经存在但不在栈顶,那么Activity依然会被重新创建;

应用场景: 登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏

singleTask栈内复用模式:

只要Activity在一个任务栈中存在,那么多次启动此Activity都不会重新创建实例,并回调onNewIntent方法,此模式启动Activity A,系统首先会寻找是否存在A想要的任务栈,如果不存在,就会重新创建一个任务栈,然后把创建好A的实例放到栈中;

应用场景:程序模块逻辑入口:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面

singleInstance单实例模式:

如果哪一个activity设置了这种启动模式,那么只要一启动,就会把这个activity的实例放到一个独立的栈中,里面有且只有它自己一个实例, 以后如果还启动这个activity,将不会创建新的实例,而是把它所在的栈移动到最前面显示给用户看

应用场景:系统Launcher、锁屏键、来电显示等系统应用

===============================================

Standare:默认,无需设置

SingleTop:APP接收到多条推送消息,点开不同消息,均由同一实例展示。

SingleTask:APP的主页,无论哪种业务场景下再次回到此页,都不应保留之上Activity。

SingleInstance:如APP经常调用的拨打电话、系统通讯录、地图类APP 等页面,不同APP调用此类Activity 时,首次创建实例,之后其他APP只能复用此实例。