问题验证:
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