我正在创建一个android应用程序,其中一个用户将能够看到地图上的另一个用户。
事情是这样的
有一个web服务,客户端从web服务请求所有登录用户,然后将用户呈现为地图上的标记。每隔几秒钟,它就会再次发出请求。
我已经安排好了客户方面的工作。
问题在于服务器端。我的做法是:
它起作用了。但我知道这不是这样做的。
以下是问题所在:
如何改进服务器逻辑?
发布于 2014-11-18 09:19:45
您必须创建一个新的线程,这样如果调用比预期的时间更长,调用就不会锁定设备。AsyncTask是一种使用多线程的简单方法,但它缺乏重复任务的功能。我想说的是,您最好要么使用Timer,要么使用较新的ScheduledExecutorService。如果您选择使用计时器,则可以创建一个TimerTask来传递它。ScheduledExecutorService则采用可运行的方法。
您可能希望将线程包装在服务中(服务不提供新线程),但这并不总是必要的,这取决于您的需要。
正如建议的那样,您还可以使用Handler.postDelayed()。尽管您仍然需要创建一个新线程,然后在它上调用Looper.prepare():
类LooperThread扩展线程{公共处理程序mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}}( Looper中的代码)
另外,每5秒对webservice的调用似乎太频繁了,特别是当用户处于缓慢连接或需要传输数据的情况下,尽量减少调用。
发布于 2014-11-18 09:11:10
使用Google消息传递服务。每5秒请求一次是个坏主意,而且也会耗尽电池。只需要在服务器和客户端之间更新更改。因此,推送通知是正确的方式。
在你的例子-不是所有的100个用户的位置将改变每5秒。也规范变化
如果您使用轮询机制,服务器可以使用一个rest发送所有位置更新。
https://stackoverflow.com/questions/26990332
复制相似问题