startActivityForResult 使用场景是什么? requestCode、 resultCode 含义是什么?
用户开始新的活动,并且希望得到新活动的某些信息。比如选择照片、选择联系人、选择收货地址、进行某块数据编辑工作等。在开启新的activity关闭后通过setResult回传数据进行通信
requestCode是请求码,用于表示请求的来源的,resultCode是结果码,用于标识结果的来源。requestCode小于0时,收不到回调结果
A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?
在B finish的时候会执行setResult。setResult不可以位于finish之后,在finish之后执行setResult,数据不能传递到源activity.setResult/finish类似于生产者/消费者模型。setResult负责生产数据,finish用于消费数据。
startActivityForResult 和 singleTask 导致源 Activity 收不到正确结果问题
- 基本原则: 源 Activity 和目标 Activity 无法在跨 Task 情况下通过 onActivityResult 传递数据
- Android 5.0 以上 AMS 在处理 manifest.xml 文件中的 singleTask 和 singleInstance 信息「不会」创建新的 Task,因此可以收到正常回调
- Android 4.4.4 以下 AMS 在处理 manifest.xml 文件中的 singleTask 和 singleInstance 信息「会」创建新的 Task,因此在 startActivity 之后立即收到取消的回调
- 通过 dumpsys activity activities 命令查看 AMS 状态,验证两个 Activity 是否属于不同的 Task
网友评论