我开发了具有多个数据源的Android应用程序 - 为简单起见,我们假设:
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协议进行持续数据交换)non-HTTP
(只有一段时间)
假设应用程序从两个数据源接收相同类型的数据 - 我们将其称为HTTP
。
当HTTP调用发生时,应用会收到events
的 数组 ,同时收到events
案例non-HTTP
逐个 。
有一个Android服务负责events
non-HTTP
。定期events
调用可以使用其他内容(不重要的方式)实现
我的问题:
我希望在一个地方(数据聚合器)处理所有来源的HTTP
。从events
收到的Events
应该先处理,HTTP
non-HTTP
等待轮到你。{
那么,应该如何实现数据聚合器呢?也许作为Android服务?
谢谢!
P.S。 events
- 是XMPP协议
答案 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);
});
}
}