频道栏目
首页 > 资讯 > 其他 > 正文

StartActivityForResult方法和finish方法的一些理解

17-12-12        来源:[db:作者]  
收藏   我要投稿

1.startActivityForResult方法的使用场景?requestCode和resultCode的含义?

答: 使用场景:用户从一个activity跳转到一个新的activity并从新的activity中获取一些信息。如:跳转图片库选择某个图片做头像,选择联系人,选择收货地址等等。

requestCode用于记录跳转过来的activity做什么(是选择照片还是选择收货地址)该信息会发送到 AMS 那边的 ActivityRecord.requestCode 变量进行记录,Client 端新 Activity 并不知道这个信息。
注意:requestCode >= 0 (至于原因得翻源码 ,我功力不足,所以…)
如果requestCode的值<0,则startActivityForResult方法的效果就类似与startActivity。

resultCode 告诉调用者的一些信息,该信息由被调用 Activity / framework 写入,并经过 AMS 传递给源 Activity。

2.A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?

不可以.原因如下:

  public final void setResult(int resultCode, Intent data) {
        synchronized (this) {
            mResultCode = resultCode;
            mResultData = data;
        }
    }

可以看到setResult方法只是进行了赋值操作。再看一下finish方法

可以看出finish方法才是真正的去把值传回去。

3.startActivityForResult 和 singleTask 导致源 Activity 收不到正确结果问题

3.1.基本原则
源 Activity 和目标 Activity 无法在跨 Task 情况下通过 onActivityResult 传递数据

3.2 Android 5.0 以上 AMS 在处理 manifest.xml 文件中的 singleTask 和 singleInstance 信息「不会」创建新的 Task,因此可以收到正常回调

3.3 Android 4.4.4 以下 AMS 在处理 manifest.xml 文件中的 singleTask 和 singleInstance 信息「会」创建新的 Task,因此在 startActivity 之后立即收到取消的回调。

相关TAG标签
上一篇:AndroidStudio的常用快捷键使用方法
下一篇:PHP字符串长度不一致如何解决?
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站