美文网首页
关于startActivityForResult

关于startActivityForResult

作者: suxm | 来源:发表于2018-02-07 16:04 被阅读21次

    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

    相关文章

      网友评论

          本文标题:关于startActivityForResult

          本文链接:https://www.haomeiwen.com/subject/wuaozxtx.html