本文已經(jīng)廢棄,請(qǐng)讀者移步至
Android封裝線程優(yōu)化可配置的定時(shí)緩存處理事件工具類 - 簡(jiǎn)書
類似刷新列表場(chǎng)景,由于多個(gè)地方會(huì)調(diào)用刷新,但是頻繁刷新耗性能,其實(shí)我們只需要取一定時(shí)間內(nèi)第一次和最后一次進(jìn)行處理。
以此,封裝了一個(gè)工具類。
使用步驟示例:
1、初始化
CacheTimeDownTodoHelper cacheTimeDownTodoHelper = new CacheTimeDownTodoHelper(this, 1000, new CacheTimeDownTodoHelper.OnTimeToDoCallBack() {
@Override
public void onTimeToDoCallBack() {
//Do something
}
});
2、刷新時(shí)調(diào)用
boolean unDelayed = updateUserListCacheTimeDownTodoHelper.cacheTimeDownTodo();
if (unDelayed) {
//Do something
}
附工具類代碼:
/**
* <pre>
* 緩存處理事件,用于多次調(diào)用一個(gè)方法時(shí),我們只需要取一定時(shí)間內(nèi)第一次和最后一次
* </pre>
*/
public class CacheTimeDownTodoHelper {
/**
* 是否已經(jīng)在延遲處理中
*/
private boolean isDelayed;
private LifecycleOwner lifecycleOwner;
/**
* 上次處理時(shí)間
*/
private long lastTodoTime;
private OnTimeToDoCallBack onTimeToDoCallBack;
/**
* 緩存時(shí)間
*/
private int timeLimit;
public CacheTimeDownTodoHelper(LifecycleOwner lifecycleOwner, int timeLimit, OnTimeToDoCallBack onTimeToDoCallBack) {
this.lifecycleOwner = lifecycleOwner;
this.timeLimit = timeLimit;
this.onTimeToDoCallBack = onTimeToDoCallBack;
}
public boolean cacheTimeDownTodo() {
if (isDelayed) {
return false;
}
//距離上次刷新在time_limit時(shí)間內(nèi)
if (System.currentTimeMillis() - lastTodoTime < timeLimit) {
isDelayed = true;
tadoTimeDown();
return false;
}
lastTodoTime = System.currentTimeMillis();
return true;
}
private void tadoTimeDown() {
if (lifecycleOwner == null) {
Observable.timer(timeLimit, TimeUnit.MILLISECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
tadoTime();
}
});
return;
}
//倒計(jì)時(shí)處理
Observable.timer(timeLimit, TimeUnit.MILLISECONDS)
//AutoDispose 防止內(nèi)存泄漏
.as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(lifecycleOwner)))
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
tadoTime();
}
});
}
private void tadoTime() {
isDelayed = false;
lastTodoTime = System.currentTimeMillis();
if (onTimeToDoCallBack != null) {
onTimeToDoCallBack.onTimeToDoCallBack();
}
}
public interface OnTimeToDoCallBack {
void onTimeToDoCallBack();
}
}