Activity 四种启动方式及Flags

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014619545/article/details/88885456

activity 四种启动方式

  • standard标准模式:每次启动一个Activity就会创建一个新的实例
  • singleTop栈顶复用模式:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调 onNewIntent(intent) 方法。同个Activity实例在栈中可以有多个,即可能重复创建;该模式的Activity会默认进入启动它所属的任务栈,即不会引起任务栈的变更;为防止快速点击时多次startActivity,可以将目标Activity设置为singleTop

  • singleTask栈内复用模式:只要该Activity在一个任务栈中存在,都不会重新创建,并回调 onNewIntent(intent) 方法。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,并把该Activity放进去;如果存在,就会创建到已经存在的栈中。同个Activity实例在栈中只有一个,即不存在重复创建;可通过android:taskAffinity设定该Activity需要的任务栈,即可能会引起任务栈的变更;常用于主页和登陆页
  • singleInstance单实例模式:具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例。当我们这个程序的活动允许其他程序调用时,要实现这个程序和其他程序共享这个活动的话,前边的三种模式都实现不了,因为每个程序都有自己的返回栈,同一个活动在不同的返回栈中入栈的时候会创建一个新的实例。而singleIntance模式可以解决这个问题,以为这个模式有一个独立的返回栈来管理这个活动,无论有多少程序来调用这个活动,都共用同一个返回栈。

Activity 的 Flags

FLAG_ACTIVITY_NEW_TASK
    为Activity 指定 singleTask 启动模式,效果和在 XML 中指定 singleTask 模式相同

FLAG_ACTIVITY_SINGLE_TOP
    为Activity 指定 singleTop 启动模式,效果和在 XML 中指定 singleTop 模式相同

FLAG_ACTIVITY_CLEAR_TOP
    具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity 都要出栈。这个标记位一般会和 singleTask 启动模式一起出现,在此种情况下,被启动 Activity 实录如果已经存在,系统则会调用它的 onNewIntent。如果被启动的Activity 采用 standard 模式启动,那么它连同它之上的Activity 都要出栈,系统会创建新的Activity 实例并放入栈顶。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有此标记位的Activity 不会出现在历史Activity 的列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity 的时候这个标记比较有用。它等同于在XML 中指定Activity 的属性 android:excludeFromRecents="true"


感谢:https://blog.csdn.net/liuhe688/article/details/6754323

猜你喜欢

转载自blog.csdn.net/u014619545/article/details/88885456