您的位置:首页 > 其它

Activity的启动模式

2015-08-06 19:11 204 查看

Activity共有四种启动模式:standard、singleTop、singleTask、singleInstance。

在清单文件中为Activity设置启动模式,不设置默认是standard模式

各个模式详解:


     1.  Standard

默认值。系统在启动 activity 的 task 中创建一个新的 activity 实例,并把 intent 传送路径指向它。 该 activity 可以被实例化多次,各个实例可以属于不同的 task,一个 task 中也可以存在多个实例。

  1. singleTop

如果 activity 已经存在一个实例并位于当前 task 的栈顶,则系统会调用已有实例的 onNewIntent() 方法把 intent 传递给已有实例,而不是创建一个新的 activity 实例。 activity 可以被实例化多次,各个实例可以属于不同的 task,一个 task 中可以存在多个实例(但仅当 back stack 顶的 activity 实例不是该 activity 的)。

 

比如,假定 task 的 back stack 中包含了根 activity A 和 activities B、C、D(顺序是 A-B-C-D;D 在栈顶)。 这时过来一个启动 D 的 intent。 如果 D 的启动模式是默认的"standard",则会启动一个新的实例,栈内容变为 A-B-C-D-D。 但是,如果 D 的启动模式是"singleTop",则已有的 D 实例会通过 onNewIntent() 接收这个 intent,因为该实例位于栈顶——栈中内容仍然维持 A-B-C-D 不变。 当然,如果 intent 是要启动 B 的,则 B 的一个新实例还是会加入栈中,即使 B 的启动模式是"singleTop"也是如此。

  1. singleTask

系统将创建一个新的 task,并把 activity 实例作为根放入其中。 但是,如果 activity 已经在其它 task 中存在实例,则系统会通过调用其实例的 onNewIntent() 方法把 intent 传给已有实例,而不是再创建一个新实例。 此 activity 同一时刻只能存在一个实例。

注意: 虽然 activity 启动了一个新的 task,但用户仍然可以用回退键返回前一个 activity。

  1. singleInstance

除了系统不会把其它 activity 放入当前实例所在的 task 之外,其它均与"singleTask"相同。 activity 总是它所在 task 的唯一成员;它所启动的任何 activity 都会放入其它 task中。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: