作为数据聚合器的服务

Service as data aggregator

我开发了具有多个数据源的 Android 应用程序 - 为简单起见,我们假设:

  1. non-HTTP(通过 TCP 协议的常量数据交换)
  2. HTTP(只有一段时间)

假设应用程序从两个数据源接收相同类型的数据 - 我们称它们为 events。 当 HTTP 调用发生时,应用程序接收 array of events,而在 non-HTTP 情况下 events 是收到了一个接一个.

有一个 Android 服务负责 non-HTTP events。周期性 HTTP 调用可以使用其他东西实现(如何实现并不重要)

我的问题:
我希望在一个地方(数据聚合器)处理来自所有来源的 events。从 HTTP 收到的 Events 应首先处理,而 non-HTTP events 正在等待轮到它。
那么,数据聚合器应该如何实现呢?也许作为 Android 服务?
谢谢!

P.S。 non-HTTP - 是 XMPP 协议

实际上,您不需要将数据聚合器作为一项服务,而只是一个 "component"(一个或多个 类)。请注意,您已经有一个服务来监听 xmpp 的变化。您可以将 http 调度程序封装在与 xmpp 侦听器相同的服务中,这样整个应用程序将在后台运行。

类似这样的东西(伪代码):

class BackgroundService extends Service {

    @Override
    public int onStartCommand(Intent i, int flags, int startId) {
        DataAggregator agg = //injected or "new" or whatever;
        XmppManager xmpp = new XmppManager(agg);
        HttpManager http = new HttpManager(agg);
        xmpp.startListening();
        http.schedule();
    }

}

interface DataAggregator {
    void onEvent(Event ev);
    void onEvents(List<Event> evs);
}

class XmppManager {

    private final DataAggregator agg;
    private final XmppConnection xmpp;

    //ctor

    public void startListening() {
        xmpp.listen(e -> agg.onEvent(e));
    }

}

class HttpManager {

    private final DataAggregator agg;
    private final Timer timer;
    private final HttpApi api;

    //ctor

    public void schedule() {
        timer.each(5, MINUTES).do({
            List<Event> evs = api.getEvents();
            agg.onEvents(evs);
        });
    }

}