Android

Activity启动模式

Activity的管理方式:任务栈(先进后出)

一、启动模式

Standard:标准模式。每次启动时都会创建一个新的实例在栈顶。A启动B,B会进入A的栈中并位于栈顶。

  • ApplciationContext无任务栈,无法采用标准模式启动Activity,可以为待启动的Activity指定标记位:FLAG_ACTIVITY_NEW_TASK来为其创建一个新任务栈启动。

SingleTop :栈顶复用模式。如果需要新创建的实例就在栈顶,那么就不会去重建,而是复用(调用onNewIntent(),不调用onCreate() 和 onStrat()),否则就重新创建。

SingleTask :栈内复用模式。如果实例在当前栈中已经存在,就会将当前实例上面的其他实例都移除栈,回调onNewIntent(),没有则创建新Activty。

SingleInstance :单例模式。创建Activity时只会创建一个实例,并使用一个全新的栈来装载。SingleTask模式的加强版。

SingleInstancePerTask:Android12新增,默认作用和singleTask相似,不同的在于singleInstancePerTask不需要设置一个不同的taskAffinity即可创建新的Task。

  • 结合Intent.FLAG_ACTIVITY_MULTIPLE_TASK和Intent.FLAG_ACTIVITY_NEW_DOCUMENT,每次启动了launchMode设置为“singleInstancePerTask”的Activity都可以创建一个新的Task,那么这个新启动的Activity自然就是这个新创建的Task的root Activity。singleInstancePerTask是singleTask的扩展,这个Activity可以有多个实例,但是每个都是所在的Task的root Activity。

二、设置启动模式

1.AndroidManifest.xml内设置

 <activity
     android:name=".MainActivity"
     android:launchMode="singleInstancePerTask">
 </activity>

1.通过Intent设置标志位

 val intent = Intent(this,MainActivity::class.java)
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 startActivity(intent)
  • Intent设置方式的优先级 > Manifest设置方式,即以前者为准
  • Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP
  • Intent设置方式 无法设置单例模式(SingleInstance)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值