2015-05-24 46 views
2

我的应用程序正在后台线程中解析来自inputStream的数据。根据读取的数据,它必须将 消息推送到gui。Android:Intent或Handler + listener + runnable?

几个月前,我做了一个运行这样的一个implentation:

  • 的activiy实现特定监听器接口(每个消息类型的一种方法,消息参数将作为方法的结构参数传递) 。
  • 活动在某处注册侦听器。
  • 每次阅读线程推送到活动时,它会创建一个推送到处理程序(在gui线程中创建)的可运行的 。可运行的 在活动线程中执行并调用侦听器的方法。

那是工作相当顺利,但...

几天前一边看书,我发现意图。 Itents可以通过简单的意图广播来代替 该结构,其中活动注册在所需的 意图上。

今天,我想知道哪种解决方案最适合在性能方面。 当然,第一个解决方案在类别方面更复杂,但 ,不假定的性能...

任何人有任何线索?

感谢

朱利安

回答

2

我不知道该解决方案将适合最好在性能方面

这取决于你的意思是“一个简单的意图广播”是什么。

如果你的意思是你在呼唤你的Activity或其他ContextsendBroadcast()registerReceiver(),这将是更糟糕的表现,因为这涉及进程间通信(IPC),即使广播和接收器都在同一处理。它也会引发安全问题,因为系统上的任何应用程序都可以向您发送这些广播。

如果你的意思,你是对的LocalBroadcastManager单一实例调用sendBroadcast()registerReceiver(),这是没有问题的,应该是相当的速度,明智的你使用的是什么。 LocalBroadcastManager实现了进程内事件总线,消除了系统级广播的开销和安全问题。

就我个人而言,我会使用另一个事件总线实现,如greenrobot's EventBus,以方便编程。

+0

我打算使用LocalBroadcastManager。 Greenrobot的EventBus很有趣。谢谢。 – Julien

2

您应该知道,如果使用广播,您将在稍后显着的时间(例如延迟)收到结果

+0

你有这方面的来源吗? – Saket

+1

@Saket不,我之前做了一些研究,哪个更好。如果你有几个听众,广播更好,更容易避免泄漏,但如果你有一个接口,我已经看到使用接口而不是广播要快得多。 –