浏览 Volley 源代码,似乎 Request 的 setSequence 方法是无用的。在 RequestQueue.add(Request) 方法中,请求似乎是按照它们添加的原始顺序添加的,因为这行将表明:
request.setSequence(getSequenceNumber());
(getSequenceNumber() 只返回一个增量计数器)。有什么方法可以订购请求,或者我应该进一步破解 Volley 吗?
浏览 Volley 源代码,似乎 Request 的 setSequence 方法是无用的。在 RequestQueue.add(Request) 方法中,请求似乎是按照它们添加的原始顺序添加的,因为这行将表明:
request.setSequence(getSequenceNumber());
(getSequenceNumber() 只返回一个增量计数器)。有什么方法可以订购请求,或者我应该进一步破解 Volley 吗?
利用Priority
private Priority mPriority = Priority.LOW;
@Override
public Priority getPriority() {
return mPriority;
}
public void setPriority(Priority priority) {
mPriority = priority;
}
更多细节在这里。
你不能给 request 一个命令,但你可以让它们一个接一个地运行。为此,您需要实现自己的RequestQueue。
这是一个示例,它演示了如何使所有请求以相同的顺序执行,您将它们添加到队列中,因为它使用单线程执行。
// Copied from Volley.newRequestQueue(..); source code
File cacheDir = new File(context.getCacheDir(), "def_cahce_dir");
String userAgent = "volley/0";
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
userAgent = packageName + "/" + info.versionCode;
} catch (PackageManager.NameNotFoundException e) {
}
if (stack == null) {
if (Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
// Prior to Gingerbread, HttpUrlConnection was unreliable.
// See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
int threadPoolSize = 1; // means only one request at a time
RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network, threadPoolSize);
queue.start();