作为数据聚合器的服务

时间:2018-02-01 12:04:09

标签: android performance networking android-service

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

  1. function _from_tables($tables) { /*if ( ! is_array($tables)) { $tables = array($tables); } return '('.implode(', ', $tables).')';*/ if ( ! is_array($tables)) { return strstr($tables, ',') ? '('.$tables.')' : $tables; } else { return count($tables) > 1 ? '('.implode(', ', $tables).')' : end($tables); } } (通过TCP协议进行持续数据交换)
  2. non-HTTP(只有一段时间)
  3. 假设应用程序从两个数据源接收相同类型的数据 - 我们将其称为HTTP。 当HTTP调用发生时,应用会收到events 数组 ,同时收到events案例non-HTTP 逐个

    有一个Android服务负责events non-HTTP。定期events调用可以使用其他内容(不重要的方式)实现

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

    P.S。 events - 是XMPP协议

    enter image description here

1 个答案:

答案 0 :(得分:1)

实际上,您不需要将数据聚合器作为服务,而只需要一个"组件" (一个或多个班级)。请注意,您已有一项服务来监听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);
        });
    }

}