Activity的 LaunchMode和Flags

Activity的启动模式分为四种, standard(默认),SingleTop,SingleTask,SingleInstance


standard模式是Activity默认的启动模式,表示 每次启动Activity就会创建一个新的实例,无论这个实例是否存在。它的onCreate(), OnStart(), OnResum()都会被调用。同时,谁启动了这个Activity,这个Activity就会在谁的栈中,因此我们不能使用ApplicationContext去启动standard模式的Activity,因为非Activity类型的Contex没有任务栈。这时我们需要指定FLAG_ACTIVITY_NEW_TASK ,去创建一个新的栈在创建此Activity。


singleTop:栈顶复用模式,即启动Activity时会现在当前栈中查找是否存在此Activity,若此Activity已经在栈顶则不会再次创建新的实例,即它的onCreate(),onStart()不会被调用,而是调用它的onNewIntent方法。如果此Activity不在栈顶,则会重现创建此Activity。比如目前栈中有ABCD四个Activity,D位于栈顶,此时再次启动D,若D的启动模式为SingleTop,那么栈内依然为ABCD;若D的启动模式为standard,那么栈内的情况为ABCDD。若栈中情况为ABCD,此时要启动B,无论B的模式是singleTop还是standard,栈内的情况都为ABCDB。


singleTask:栈内复用模式,和singleTop不同的是,只要此Activity所需栈中存在此Activity都不会再次创建,同样会调用OnNewIntent方法。Activity所需栈是针对singleTask来说的,一般Activity所在的栈默认是App的包名,使用singleTask时我们可以通过TaskAffinity来指定Activity所需栈。同时,singleTask会自带clearTop属性,例如,a栈中有ABC三个Activity,b栈中有D,ABC的所需栈为a,A的启动模式为singleTask,
此时在D中启动A,那么因为A已存在a中,根据“先进后出”原则,A想要到栈顶,就必须把BC出栈。现在的情况就变成a栈中只剩下A,此时按下back键就会返回到桌面。


singleInstance:单实例模式。是singleTask的加强版,具有singleTask的属性,特殊的是此Activity会单独的在一个任务栈中,也就是说只要此栈不被销毁,此Activity都不会被再次创建。因为栈中只有一个Activity,所以此Activity也就没有clearTop的属性了。

另外在说一下Intent中的Flag
FLAG_ACTIVITY_NEW_TASK 指定Activity的启动模式为singleTask
FLAG_ACTIVITY_CLEAR_TOP 要启动的Activity所在的栈的Activity会被清空
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有此标记的Activity不会出现在历史记录中,既不能返回此Activity 。等同于android:excludeFromRecents=”true”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值