StartActivityForResult方法和finish方法的一些理解
2017-12-11 21:26
141 查看
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 之后?
不可以.原因如下:
可以看到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 之后立即收到取消的回调
上述结果参考刚哥的标准答案以及自己的思考.
答: 使用场景:用户从一个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 之后立即收到取消的回调
上述结果参考刚哥的标准答案以及自己的思考.
相关文章推荐
- Sqlite操作的一些关键类的官方说明与Intent的startactivityforresult方法
- startActivityForResult 方法
- Activity中的startForResult方法的使用
- Android初级开发第八讲--之startActivityForResult方法讲解
- Activity回传数据方法startActivityForResult onActivityResult
- 【原创】Android学习笔记(8)————详细谈谈intent的startActivityForResult()方法
- Activity回传数据方法startActivityForResult onActivityResult
- 安卓开发中遇到的Intent的startActivityForResult方法回调后不执行onActivityResult方法
- 关于startActivityForResult()方法的使用
- Android初级开发第八讲--之startActivityForResult方法讲解
- Android中返回数据到前一个Activity — startActivityForResult方法
- startActivityForResult方法说明
- Intent和Activity的另一种启动方法startActivityForResult()
- Fragment中类似Activity里的startActivityForResult的方法
- startActivityForResult 方法 返回数据到前一个 Activity
- startActivityForResult 用在于多个Activity之间传值时一些需要注意的用法
- [android]startActivityForResult方法简介
- Android中返回数据到前一个Activity — startActivityForResult方法
- startActivityForResult方法的使用
- android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法