首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同步post在Otto (事件总线)中的性能

同步post在Otto (事件总线)中的性能
EN

Stack Overflow用户
提问于 2014-01-27 05:33:24
回答 2查看 3.3K关注 0票数 0

在我的应用程序中,我使用Otto作为事件总线。我浏览了square.github.io/otto。它说“发送到总线是一个同步的动作,所以当程序继续执行时,可以保证所有的订阅者都被调用了。”我很好奇为什么它不提供异步发布。如果我们只有同步发布,性能会成为问题吗?这是否意味着总线事件的接收者应该通过使用其他异步任务或线程来考虑性能问题,以防止阻塞一切?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-01-27 06:07:26

一个有意的设计决定是避免线程化。允许从其他线程发布将不会允许Otto有一个可预测的事件交付顺序。这给Otto增加了更多的复杂性,这与主要的设计决策之一-库的简单性-相矛盾。

如果你愿意,你可以看到一个presentation of Eric Burke,在那里他解释了这一点(大约32:10)。

应该也不会有性能问题。只需在后台线程中执行所有长时间运行的任务,然后从主线程将post()更新回Bus。有很多方法可以做到这一点,比如Activity.runOnUiThread()AsyncTask.onPostExecute()Handler.post()

如果你需要更多,你可以使用TinyBus,它使用相同的接口,但它的速度更快,并且它支持后台处理,或EventBus

票数 7
EN

Stack Overflow用户

发布于 2014-01-27 06:06:18

我很好奇为什么它不提供异步发布

你需要问奥托的作者这个问题。其他任何人都只能提供意见,这对StackOverflow来说是离题的。

这是否意味着总线事件的接收者应该通过使用其他异步任务或线程来考虑性能问题,以防止阻塞一切?

这取决于:

  1. 您从哪个线程发布事件(例如,如果它是从后台线程发布的,则问题可能较少)
  2. 响应event

应执行哪些工作

这与Android中的其他任何东西都没有显著不同:作为开发人员,您需要知道您将在哪个线程上被调用,以及您计划在该线程上花费多少时间,以便知道您是否需要执行某些操作才能使该工作成为异步的。

IOW,Otto解决了事件路由的问题,但线程处理仍然取决于您。这是绿色机器人的EventBus提供更多选择的一个领域。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21369535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档