关于onActivityResult回调问题

1. Activity A使用startForResult启动Activity B,B什么都不做并返回A,A中的onActivityResult回调是否会执行?

startActivity()方法,最终都是调用startActivityForResult()方法。默认的requestCode = -1, resultCode = 0,当你的requestCode != -1时,onActivityResult()一定会被调用。


2. 如果Activity B以singleTask模式启动,则A启动B的时候,A的onActivityResult会被立即执行

如图:假设当前的应用程序存在两个栈:其中一个直接显示在屏幕上负责与用户完成交互,叫Back Stack;另一个是隐藏在后台的Background Task,且位于该栈顶的Activity Y的启动模式被设置为singleTask。

       如果Activity 2中调用Background Task中已经启动过的Activity Y,则Background Task占据屏幕并且将该Task下所有的栈保留当前的栈位置和顺序push进Back Task形成新的结构。在Activity界面按返回键,则Activity Y出栈,Activity X占据屏幕。因此可见,由Activity2调用的Activity Y,但返回键后,回退显示的是Activity X。所以,即使在Activity Y执行setResult()函数,Activity2也是无法接收到的。
      由于这种现象的存在,所以android系统处于某种保护机制,发现将要跳转的Activity的启动模式是singleTask时,若需要执行onActivityResult()函数则立即执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值