简述Android启动模式

来源:互联网 发布:深圳平湖淘宝客服招聘 编辑:程序博客网 时间:2024/04/30 15:20

Android的四种启动模式

  • 简述Android的四种启动模式

    1. Standard:系统的默认模式,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。

      例如: 我们有一个Activity,名字为A1,A1上面有一个按钮,跳转的页面也是A1;
      我们不断地点击这个按钮,他会不断地创建A1实例,点返回键会依次销毁这些A1。

    2. SingleTop :栈顶复用模式,在这种模式下如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。

      例如: 若我有两个Activity名为B1、B2,
      若打开的顺序为B1->B2->B2,实际上的调用顺序是:A1->B2,它不会创建最后一个B2;
      若打开的顺序为B1->B2->B1->B2,这样打开的顺序就和Standard一样了,为:B1->B2->B1->B2.

    3. singleTask:栈内复用模式,这事一种单实例模式。在这种模式下,只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,和singleTop一样,系统也会回调其onNewintent。

      例一:
      比如目前任务栈S1中的情况为ABC,这个时候Activity D以singletop模式请求启动,其所需要的任务栈S2,由于S2和D的实例均不存在,所以系统会先创建任务栈S2,然后再创建D的实例并将其入栈到S2.
      例二:
      另外一种情况,假设D所需的任务栈为S1,其他情况如上面例子1所示,那么由于S1已经存在,所以系统会直接创建D的实例并将其入栈到S1.
      例三:
      如果D所需的任务栈为S1,并且当前任务栈S1的情况为ADBC,根据栈内复用的原则,此时D不会重新创建,系统会把D切换到栈顶并调用其onNewIntent方法,同时由于singleTask默认具有clearTop的效果,会导致栈内所有在D上面的Activity全部出栈,于是最终S1中的情况为AD。

    4. singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

      例一:
      程序有三个ActivityD1、D2、D3,其中D2为singleInstance模式。
      若打开的顺序是:D1->D2->D3->D2,假设D1保存的task叫做201,从D1启动D2,这个时候D2会放到一个新的task中,假设这个task叫做209,最后从D2启动D3的时候,D3又会被放置到D1的那个task中间。而最后一次D3启动D2的时候,D2也不会创建新的实例。
      也就是说最后D1、D3会在task201中,而D2会单独放在task209中。
      例二:
      如果别的应用有一个activity叫T1,他所在的task叫101,
      打开的顺序是T1->D2->D3,最后的结果是T1一个task,D2一个task,D3一个task

0 0