Android 验证Activity启动模式

Android 验证Activity启动模式

查看任务栈

可以通过 adb shell dumpsys activity activities 命令查看 Activity 任务栈。

launchMode

standard

OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{347a4b3 #124 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=4}
bounds=[0,0][1080,2400]
    * ActivityRecord{75681b9 u0 com.example.demo/.ThreeActivity t124}
    * ActivityRecord{156b287 u0 com.example.demo/.ThreeActivity t124}
    * ActivityRecord{2982324 u0 com.example.demo/.TwoActivity t124}
    * ActivityRecord{f21da70 u0 com.example.demo/.OneActivity t124}

singleTop

将 ThreeActivity 设置为 singleTop。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{5241c10 #154 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
        bounds=[0,0][1080,2400]
        * ActivityRecord{d70d694 u0 com.example.demo/.ThreeActivity t154}
        * ActivityRecord{9c92c1f u0 com.example.demo/.TwoActivity t154}
        * ActivityRecord{54d0309 u0 com.example.demo/.OneActivity t154}

singleTask

将 TwoActivity 设置为 singleTask。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> TwoActivity

栈信息:

* Task{ec23885 #174 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]
    * ActivityRecord{f6f60c7 u0 com.example.demo/.TwoActivity t174}
    * ActivityRecord{1c8c6da u0 com.example.demo/.OneActivity t174}

singleInstance

将 ThreeActivity 设置为 singleInstance。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{628a158 #176 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]
	* ActivityRecord{285b2b1 u0 com.example.demo/.ThreeActivity t176}
* Task{ce196c3 #175 type=standard A=10289:com.example.demo U=0 visible=false mode=fullscreen translucent=true sz=2}
bounds=[0,0][1080,2400]
	* ActivityRecord{2a72e67 u0 com.example.demo/.TwoActivity t175}
	* ActivityRecord{b04408e u0 com.example.demo/.OneActivity t175}

Intent标记

FLAG_ACTIVITY_NEW_TASK

启动 ThreeeActivity 时添加该标记。

依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{93cafdd #142 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=4}
bounds=[0,0][1080,2400]
    * ActivityRecord{9233d38 u0 com.example.demo/.ThreeActivity t142}
    * ActivityRecord{7a45878 u0 com.example.demo/.ThreeActivity t142}
    * ActivityRecord{b0bb4ce u0 com.example.demo/.TwoActivity t142}
    * ActivityRecord{3652a23 u0 com.example.demo/.OneActivity t142}

在Manifest.xml文件中,给ThreeActivity添加 taskAffinity="www.baidu.com" 属性,并依次启动:OneActivty -> TwoActivity -> ThreeActivity -> ThreeActivity

栈信息:

* Task{919184b #144 type=standard A=10289:www.baidu.com U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]
    * ActivityRecord{a186228 u0 com.example.demo/.ThreeActivity t144}
* Task{6b64d39 #143 type=standard A=10289:com.example.demo U=0 visible=false mode=fullscreen translucent=true sz=2}
bounds=[0,0][1080,2400]
    * ActivityRecord{b15b5da u0 com.example.demo/.TwoActivity t143}
    * ActivityRecord{a3c6f7e u0 com.example.demo/.OneActivity t143}

总结:

如果没有设置 taskAffinity 属性,表现形式和standard模式一样;如果设置了 taskAffinity 属性,会在一个新的任务栈中启动一个Activity。

FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{ff9bb3d #173 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]
    * ActivityRecord{52b8327 u0 com.example.demo/.ThreeActivity t173}
    * ActivityRecord{7866df1 u0 com.example.demo/.TwoActivity t173}
    * ActivityRecord{28f7f32 u0 com.example.demo/.OneActivity t173}

再启动 -> ThreeActivity(添加该属性)

栈信息:

* Task{ff9bb3d #173 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=1}
bounds=[0,0][1080,2400]
    * ActivityRecord{4903a43 u0 com.example.demo/.ThreeActivity t173}

总结:

会清空任务栈中的Acitivity实例,并启动新的Activity实例。

FLAG_ACTIVITY_CLEAR_TOP

场景一:TwoActivity设置为standard

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{42187d #165 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]
    * ActivityRecord{b4ffb82 u0 com.example.demo/.ThreeActivity t165}
    * ActivityRecord{20a3e02 u0 com.example.demo/.TwoActivity t165}
    * ActivityRecord{4c44440 u0 com.example.demo/.OneActivity t165}

再启动-> TwoActivity(设置该属性)

栈信息:

* Task{42187d #165 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]
    * ActivityRecord{22e57ea u0 com.example.demo/.TwoActivity t165}
    * ActivityRecord{4c44440 u0 com.example.demo/.OneActivity t165}

场景二:TwoActivity设置为singleTop

依次启动:OneActivty -> TwoActivity -> ThreeActivity

栈信息:

* Task{3cb644c #166 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=3}
bounds=[0,0][1080,2400]
    * ActivityRecord{4fce6bb u0 com.example.demo/.ThreeActivity t166}
    * ActivityRecord{c88c13d u0 com.example.demo/.TwoActivity t166}
    * ActivityRecord{4f10c95 u0 com.example.demo/.OneActivity t166}

再启动-> TwoActivity(设置该属性)

栈信息:

* Task{3cb644c #166 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]
    * ActivityRecord{c88c13d u0 com.example.demo/.TwoActivity t166}
    * ActivityRecord{4f10c95 u0 com.example.demo/.OneActivity t166}

总结:

如果Activity的启动模式设置为standard,该Activity会被重新创建,并且上方的Activity都会被清除;如果启动模式设置为singleTop,则该Activity不会被重建,上方的Activity会被清除。

FLAG_ACTIVITY_SINGLE_TOP

启动 TwoActivity 时添加该标记。

依次启动:OneActivty -> TwoActivity -> TwoActivity

栈信息:

* Task{5566fe4 #172 type=standard A=10289:com.example.demo U=0 visible=true mode=fullscreen translucent=false sz=2}
bounds=[0,0][1080,2400]
    * ActivityRecord{cddc22b u0 com.example.demo/.TwoActivity t172}
    * ActivityRecord{a3d4c4d u0 com.example.demo/.OneActivity t172}

总结:

和 singleTop 的效果一样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值