singleTask和startActivityForResult的纠葛(activity的重建/onActivityResult回调为0)

问题验证:

1.startActivityForResult打开singleTask模式的活动,singTask失效。(见Action2)
2.singleTask模式的活动startActivityForResult,onActivityResult会立即执行。(见Action6)

验证过程

两个activity,activity1和activity2,分别设置不同的启动模式(standard /singleTask ),用startAcivity/startActivityForResult相互启动,启动activity设置或者不设置intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)。

以下为Demo测试结果

Action1:

Activity1:standard ———— Activity2:standard
1–>2 startAcivity
2–>1 startActivityForResult
没有设置intent.addFlags
(结果:1/2都onCreate多次)
在这里插入图片描述

Action2:

Activity1:singleTask ———— Activity2:standard
1–>2 startAcivity
2–>1 startActivityForResult
没有设置intent.addFlags
(结果:1/2都onCreate多次,同上次。
原因:如果按照正常的singleTask开启1,会把2给干掉,2就收不到回调,所以singleTask模式失效,按照standard模式来的)
在这里插入图片描述
在这里插入图片描述

Action3:

Activity1:singleTask ———— Activity2:standard
1–>2 startAcivity
2–>1 startActivity
没有设置intent.addFlags(和设置CLEAR_TOP flag结果相同的)
(结果:只有2 onCreate多次,1每次被打开的时候都会被复用,就是正常的标准的singleTask。)
在这里插入图片描述

Action4:

Activity1:singleTask ———— Activity2:standard
1–>2 startAcivity
2–>1 startActivityForResult
2中start 1有设置intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
(结果:只有2 onCreate多次,同上次一毛一样)
在这里插入图片描述

Action5:

Activity1:standard ———— Activity2:standard
1–>2 startAcivity
2–>1 startActivity
2中start1有设置intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
(结果:1/2都onCreate多次,毕竟不是singleTask,加了flag没卵用)
在这里插入图片描述

Action6:

Activity1:standard ———— Activity2:singleTask
1–>2 startAcivity
2–>1 startActivityForResult
没有设置intent.addFlags
(结果:1每次都会重建,2不会,每次打开2的时候,1会被销毁,故会立即执行2的onActivityResult,收到回调cancel)
在这里插入图片描述在这里插入图片描述

程序员们辛苦了~

以上为程序媛自己的理解,如有错误,望指正。同时祝愿正在看文章的你身体健康!!

参考文章(感谢以下两位巨人的肩膀):

https://blog.csdn.net/nihaomabmt/article/details/86490090
https://blog.csdn.net/yztbydh/article/details/80450615

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值