gpt4 book ai didi

android - 改造 : How to resolve requests duplications

转载 作者:行者123 更新时间:2023-11-29 01:37:52 24 4
gpt4 key购买 nike

最近我开始使用 Retrofit 进行开发,并立即注意到它没有提供一些重要的功能,例如重试、认证处理、优先级排序等。

我设法实现了优先级排序并自己重试,但遇到了一个更难解决的问题。

我想设法在网络请求进入执行者队列之前“捕获”它们,以避免一遍又一遍地重复相同的请求。

例如。用户有时可以依次拉动刷新 5 次,而我不想调用 5 个相同的请求。相同请求的检查很容易 - 具有相同参数的相同域。

这是我的实现:

// the thread factory of the thread pool, we using it to indicate the threads' priority
ThreadFactory threadFactory = new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setPriority(threadPriority);
return t;
}
};

mQueue = new LinkedBlockingQueue<Runnable>();
mExecuter = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME, KEEP_ALIVE_TIME_UNIT, mQueue);

mExecuter.setThreadFactory(threadFactory);

mRestAdapter = new RestAdapter.Builder().setClient(new AndroidApacheClient()).setExecutors(mExecuter, mExecuter)
.setEndpoint(NetworkContants.DOMAIN).setRequestInterceptor(mRequestInterceptor).setConverter(new GsonConverter(new Gson()))
.build();

最佳答案

您可以通过标记阻止执行更多请求,这很简单。

有这样一个类:确保你输入正确。

public class CheckableCallback<T> implements Callback<T> {

private boolean isRunning;

public boolean isRunning() {
return isRunning;
}

public void setRunning(boolean isRunning) {
this.isRunning = isRunning;
}


@Override
public void success(T t, Response response) {
setRunning(false);
}

@Override
public void failure(RetrofitError error) {
setRunning(false);

}
}

在执行它之前检查回调是否正在运行:

if(!mRefreshingCallback.isRunning()){
//execute
mRefreshingCallback.setRunning(true);
}

关于android - 改造 : How to resolve requests duplications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26740385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com