1

我有一个运行 Rabbitmq 客户端并使用队列中的消息的 android 服务。客户端可以随时接收消息,所以我通过 startService 启动服务(不是绑定方法)。所以问题是我使用什么样的通信机制从服务与不同的活动进行通信:绑定还是通知?绑定不会那么有用,因为收到的 msg 可能与与可见活动不同的活动相关.. 创建模型层来处理在服务队列中收到的如此多不同的 msg 也成为一个挑战......有什么想法和建议吗?

4

2 回答 2

2

使用消息队列的标准方法如下:您应该在消息中添加某种元数据。然后在处理消息时使用按摩处理程序,借助此类元数据确定哪个确切的类应该处理您的消息。在这种情况下使用策略模式非常有用。使用这种技术,您也可以轻松地使用多个处理程序处理您的消息。

元数据可能非常不同:从某个字段值开始(例如标签),或者您可以从特定类或接口等扩展您的消息......

回答你问题的第二部分。是的,当然,如果您使用队列,它应该有一个消费者。消费者应该像消息管理器一样玩。为每条消息分配新线程是个坏主意,如果您想在应用程序中使用多个线程,我认为您最好使用线程池。但无论如何,线程的数量不应该很高,因为它会严重影响你的性能。谈论消费者应该确定消息处理逻辑的方式,或者这个逻辑可以放在线程中,这将是处理具体消息 - 我认为这两种变体都是可能的。每个都有自己的优点和缺点。但我认为这个逻辑更好地交给消费者,因为消费者管理来自队列的消息,而且这个任务更接近于消息管理,然后是消息处理本身。

于 2013-01-24T00:06:08.107 回答
0

就我而言,我使用了 EventBus:https ://github.com/greenrobot/EventBus

我所有的活动都延伸到一个具有 subscribe 方法的 abstractOne :

@Subscribe(threadMode = ThreadMode.MAIN)
public void onAlert(MyObject object) {
...
}

在我的服务中,我只是发布消息:

EventBus.getDefault().post(<MyObject>);
于 2017-11-14T14:39:57.133 回答