我正在为android上的VK社交网络编写一个客户端。这个社交网络允许每秒只执行2-3次请求,当我向不同的方法添加一些请求时,我会得到异常。“每秒请求太多”
因此,我的问题是:如何创建一个api请求队列,并能够为每个请求设置优先级。
提前行动!
发布于 2015-04-09 02:03:03
这是一个有趣的问题,因为在我的应用程序中,我倾向于为每种不同类型的服务器请求使用专用的AsyncTask。所以当我读到这个问题时,我问自己:当每个任务都是一个不知道其他任务的独立组件时,我将如何实现这样的任务呢?
我可以尝试像@GabeSechan所说的那样制作一个PriorityQueue,但这意味着我需要一个后台线程,专门用于等待任务去队列,然后执行它们,同时在删除排队任务的同时执行它们。但是这个线程听起来必须是一个Service,所以我必须添加所有的基础结构。那么,如何调试多线程问题,如挂起和竞争条件,甚至可能是死锁?不用了谢谢。一定有更简单的方法..。
所以我想..。限制请求意味着每个请求都需要在特定的时间发生。如果您没有排队请求,而是排队等待时间呢?如果您有一个单独的人为请求分配时隙怎么办?它会产生这样的效果:
Handler.postDelayed(),并使用包含请求逻辑的可运行的AsyncTask或后台线程来处理请求。时隙分配器的逻辑如下所示:
public static synchronized long getNextRequestDelay() {
long delay = 0;
long current = System.getCurrentTimeMillis();
if (current > sLastRequestTime + REQUEST_GAP_MILLIS) {
// we don't have any outstanding requests
sLastRequestTime = current;
} else {
// figure out what the delay needs to be
sLastRequestTime += REQUEST_GAP_MILLIS;
delay = sLastRequestTime - current;
}
return delay;
}现在,我在那里写了一些代码,但是我只是在答案中输入了它,所以我甚至不会声称它会编译。更不用说您应该使用像System.nanoTime()这样的单调时钟,而不是System.currentTimeMillis(),这样您就不会受到用户更改时钟时间的影响(不要忘记将您的间隔乘以1000000)。但要点是:
这很简单。我喜欢简单。我是说我真的很喜欢简单。
https://stackoverflow.com/questions/29501834
复制相似问题