作为数据聚合器的服务
Service as data aggregator
我开发了具有多个数据源的 Android 应用程序 - 为简单起见,我们假设:
non-HTTP
(通过 TCP 协议的常量数据交换)
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);
});
}
}
我开发了具有多个数据源的 Android 应用程序 - 为简单起见,我们假设:
non-HTTP
(通过 TCP 协议的常量数据交换)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);
});
}
}