Activity的启动模式

2018-10-30  本文已影响2人  Tom_Ji

Activity的启动模式

Activity的LaunchMode

standard标准模式
系统的默认模式,每次启动都会重新创建一个新的实例。
standard模式的Activity默认会进入启动它的Activity所属的任务栈中,在使用ApplicationContext去启动standard模式的Activity的时候会运行时异常。解决这个问题的方法是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为它创建一个新的任务栈,这个时候待启动Activity实际上是以singleTask模式启动的。

singleTop栈顶复用模式
如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。这个Activity的onCreate、onStart不会被系统调用,因为他们没有发生改变。如果新Activity的实例已经存在但是不在栈顶,那么新Activity仍然会重新创建。

singleTask栈内复用模式
只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,系统会回调onNewIntent方法。当一个具有singleTask模式的Activity请求启动后,系统会首先寻找此Activity所需要的任务栈,如果需要的任务栈不存在,就重新创建一个任务栈,然后创建Activity的实例后把Activity放入栈中;如果存在Activity所需要的任务栈,并且Activity的实例存在,则把Activity调到栈顶并调用onNewIntent方法,如果实例不存在,就创建Activity的实例并把Activity放入栈中。

singleInstance单实例模式
为加强的singleTask模式,此种模式只能单独的位于一个任务栈中

给Activity指定启动模式

  1. 通过AndroidMenifest设置

    android:launchMode="singleTask"
    
  1. 通过Intent中设置标志位

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    • FLAG_ACTIVITY_NEW_TASK
      为Activity指定“singleTask”启动模式
    • FLAG_ACTIVITY_SINGLE_TOP
      为Activity指定“singleTop”启动模式
    • FLAG_ACTIVITY_CLEAR_TOP
      使用此标记的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。此模式一般和FLAG_ACTIVITY_NEW_TASK 配合使用。
    • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
      使用此标记的Activity不会出现在历史Activity的列表里,相当于
    android:excludeFromRecents="true"
    
上一篇 下一篇

猜你喜欢

热点阅读