RxActivityResult

2017-03-18 03:15:17 +08:00
 nekocode

调研过已有的类似的两个开源库:

比较遗憾的是它们实现的方式比较重,都是利用 ShadowActivityHolderActivity 来进行 onActivityResult() 的代理。

使用代理 Activity 的方式太过消耗资源了,而且你每次调用 startActivityResult() 都会新建一次代理 Activity,这真是 WTF !

更好的方式是使用 Headless Fragment 来进行代理(我之前写的 rxlifecycle 也是类似的实现)。它的好处在于足够轻量级,每个 Activity 或 Fragment 在调用 startActivityResult() 只会新建唯一一个 Fragment


Github Repo :RxActivityResult

欢迎 Star~

9687 次点击
所在节点    Android
13 条回复
29995270
2017-03-18 07:53:10 +08:00
ForResult 拼成 fro Result 是故意的还是拼错了
KNOX
2017-03-18 08:13:59 +08:00
@29995270 拼错很正常,没必要猜测是故意的。
29995270
2017-03-18 08:22:00 +08:00
@KNOX 问题是全都写成了 froResult 啊,我哪知道作者是不是另有深意
29995270
2017-03-18 08:24:09 +08:00
也许作者是为了方便 static import 吧
xingda920813
2017-03-18 10:14:09 +08:00
感觉 EventBus 用的多一些, 用 result 传值比较少用.
nekocode
2017-03-18 10:27:25 +08:00
@29995270
是我拼错了。。已 Fix (深夜敲代码,没仔细检查)

@xingda920813
`startActivityForResult()` 是系统通用的函数,你可以用它打开其它应用的 Activity 并捕获结果。显然 EventBus 并不能。而且尽管在应用内用 EventBus 来广播 Result ,也不是一种好的设计。
xingda920813
2017-03-18 10:47:17 +08:00
@nekocode

你说打开其他应用的页面的话,那是没错,但这种情况在开发中稍少一些吧,打开本应用的页面多一些。

另外 , EventBus 不要求 Result 支持序列化; EventBus 还可以一个页面发送事件,多个页面接收事件;它的使用范围也不止局限在 Activity 之间,普通的 Java 类之间也可以。感觉它的适用范围更广一些,可以将这 1 种方式普遍用于组件间通讯的解耦 (非 IPC)。

求解为什么广播 Result 不是一个好的设计?
nekocode
2017-03-18 11:12:29 +08:00
@xingda920813

讲真,不要太依赖 EventBus ,能用系统提供的方法就用系统提供的方法。

EventBus 关注的是广播,发布的是任何组件(甚至非组件)都能捕获到的消息,你需要甄别不同来源的话,依旧得为消息带上 Request Code (或其它标明来源的信息)。

另外你对序列化貌似有偏见。系统在很多地方需要你的数据支持可序列化接口是有原因的,一来方便 IPC ,二来是要解决你组件随时被销毁而丢失数据的风险。
xingda920813
2017-03-18 11:18:12 +08:00
@nekocode 学习了, 当时没怎么思考.
little_cup
2017-03-18 11:44:16 +08:00
其实贵司内部的 xxxCamera 模块也是用的一样的原理实现,但由于 4.x singleInstance activity 的原因, AgentActivity 是避免不了的...
nekocode
2017-03-18 12:12:12 +08:00
@little_cup

看了下还真是,可惜不是 Rx Style 的接口。
little_cup
2017-03-18 12:30:49 +08:00
@nekocode 惭愧,写的时候我对 Rx 还不太熟…如果下周 task 少的话我改一把
ztaober
2017-03-18 20:01:45 +08:00
star

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

https://www.v2ex.com/t/348361

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

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

© 2021 V2EX