求教 Android Activity 小知识

2017 年 9 月 19 日
 jiaming1992

如果在一个 singleTop 或者 singleInstance 的 ActivityA 中通过 startActivityForResult()方法来启动另一个 ActivityB,那么系统将直接返回 Activity.Result_CANCELED 而不会再去等待返回,这是由于系统在 Framework 层做了对这两种启动模式的限制,因为 Android 开发者认为,不同 Task 之间默认是不能传递数据的,如果一定要传递,那则只能通过 Intent 来绑定数据 ----《 Android 群英传》

新人表示有点困惑,这句话在自己写的 Demo 中测试怎么没有效果呢?
13732 次点击
所在节点    Android
13 条回复
yuPD97Yeed4QM245
2017 年 9 月 19 日
Android 5.0 以上和 Android 5.0 以下效果不同
jiaming1992
2017 年 9 月 19 日
@wl9739 我把 sdk 换成 19 还是一样效果呢 0_0
jiaming1992
2017 年 9 月 19 日
@wl9739 搞明白了,谢谢
shenwu35
2017 年 9 月 19 日
@jiaming1992 跟其他论坛一样的风格。搞明白后不说原因的。然后其他人就开始问,怎么搞明白的。然后就是死活不说的玩消失。
allenlee7c9
2017 年 9 月 19 日
@shenwu35 楼主还在消失中
yufz
2017 年 9 月 19 日
楼主写错代码了而已,他的两个 Activity 还在同一个 Task 里面,所以没有效果
zhoucan007
2017 年 9 月 19 日
注意一下,singleTop 时,两个 Activity 还是在同一个 Task 里面的。
xzg1993
2017 年 9 月 19 日
@jiaming1992 你这样以后就不要来问东西了,说完了之后就消失了?
jiaming1992
2017 年 9 月 19 日
@xzg1993 哈哈 这是论坛吧 也不是 qq 群 不能隔个五分钟刷新一次吧
jiaming1992
2017 年 9 月 19 日
我是把 tagetsdk 换成 19,但是,跑在了 25 的模拟器上 所以没有效果。。 但是换成 19 的模拟器 就出现上面说的情况了,话说 Android API 文档里也没说这个。。
jiaming1992
2017 年 9 月 19 日
@shenwu35 受教了,以后肯定搞明白了再把解决方案说一遍。
Poarry
2017 年 10 月 19 日
<p>Note that this method should only be used with Intent protocols
* that are defined to return a result. In other protocols (such as
* {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may
* not get the result when you expect. For example, if the activity you
* are launching uses the singleTask launch mode, it will not run in your
* task and thus you will immediately receive a cancel result.
*

------来自源码
jiaming1992
2017 年 10 月 20 日
@Poarry 亲测实际只对 singleTask,singleInstance 有影响,所以书中 singleTop 写的可能有误,而且源码也没说 5.0 以上 5.0 以下实现不同 0.0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/391976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX