关于FLAG_ACTIVITY_NEW_TASK

        在网上找了半天资料,还是很糊涂,纠结半天还是决定自己实践一下。由于不知道怎么在控制台查看返回堆栈,所以还是根据应用页面跳转来看栈中情况。

        创建a,b两个应用,在a中只用一个页面AvtiviytA_1,b有两个页面AvtiviytB_1,AvtiviytB_2。AvtiviytA_1,AvtiviytB_1都使用按钮跳转AvtiviytB_2,Intentd的Flags都设置为FLAG_ACTIVITY_NEW_TASK。AvtiviytB_2中有一个按钮跳转AvtiviytB_1页面,Intent的Flags不设置。AvtiviytA_1和AvtiviytB_1的launchMode属性都为默认。

1、AvtiviytB_2的launchMode的属性默认

        首先是AvtiviytB_2设置launchMode属性为默认。

        在AvtiviytA_1中启动AvtiviytB_2,打开应用B。多次在AvtiviytA_1开启后,在应用b中点击返回,转到应用a,再次打开应用b,还有AvtiviytB_2。多次关闭后才最终退出。这说明AvtiviytA_1打开的AvtiviytB_2页面没有复用,在应用b的栈中存在多个AvtiviytB_2.

2、AvtiviytB_2的launchMode的属性singleTask

        之后将AvtiviytB_2设置launchMode属性为singleTask,即栈内复用。

(1)只在AvtiviytA_1启动

只在AvtiviytA_1中点击按钮后启动了b应用,其中只有一个AvtiviytB_2页面,在AvtiviytA_1中多次点击也只有一个AvtiviytB_2页面。

(2)先在AvtiviytB_1启动,再在AvtiviytA_1启动

        先启动AvtiviytB_1,点击按钮后启动了一个AvtiviytB_2,在点击按钮新建AvtiviytB_1页面。此时栈中从下向上应为:AvtiviytB_1-AvtiviytB_2-AvtiviytB_1。

        再在AvtiviytA_1中启动,跳转到应用b,此时b的栈从下向上应为:AvtiviytB_1-AvtiviytB_2。按返回,先返回AvtiviytB_1,在退出b应用。

3、总结

        FLAG_ACTIVITY_NEW_TASK会优先找亲和性(taskAffinity属性)一样的栈,有则根据要创建的Activity的launchMode属性决定新建或复用。如果没有亲和性一样的栈,就新建一个栈,再在栈中创建Activity实例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值