Skip to content

Commit 66e1cfb

Browse files
committed
Add setRefreshTime control refresh time
1 parent d142872 commit 66e1cfb

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

progress/src/main/java/me/jessyan/progressmanager/ProgressManager.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Map;
1010
import java.util.WeakHashMap;
1111

12+
import me.jessyan.progressmanager.body.ProgressInfo;
1213
import me.jessyan.progressmanager.body.ProgressRequestBody;
1314
import me.jessyan.progressmanager.body.ProgressResponseBody;
1415
import okhttp3.Interceptor;
@@ -32,11 +33,13 @@ public final class ProgressManager {
3233
private final Map<String, List<ProgressListener>> mResponseListeners = new WeakHashMap<>();
3334
private final Handler mHandler; //所有监听器在 Handler 中被执行,所以可以保证所有监听器在主线程中被执行
3435
private final Interceptor mInterceptor;
36+
private int mRefreshTime = DEFAULT_REFRESH_TIME;
3537

3638
private static volatile ProgressManager mProgressManager;
3739

3840
public static final boolean DEPENDENCY_OKHTTP;
39-
public static int REFRESH_TIME = 200; //回调刷新时间(单位ms),避免高频率调用
41+
public static final int DEFAULT_REFRESH_TIME = 150; //回调刷新时间(单位ms),避免高频率调用
42+
4043

4144
static {
4245
boolean hasDependency;
@@ -75,6 +78,16 @@ public static ProgressManager getInstance() {
7578
return mProgressManager;
7679
}
7780

81+
82+
/**
83+
* 设置 {@link ProgressListener#onProgress(ProgressInfo)} 每次被调用的间隔时间,单位毫秒
84+
*
85+
* @param refreshTime
86+
*/
87+
public void setRefreshTime(int refreshTime) {
88+
this.mRefreshTime = refreshTime;
89+
}
90+
7891
/**
7992
* 将需要被监听上传进度的 Url 注册到管理器,此操作请在页面初始化时进行,切勿多次注册同一个(内容相同)监听器
8093
*
@@ -152,7 +165,7 @@ public Request wrapRequestBody(Request request) {
152165
if (mRequestListeners.containsKey(key)) {
153166
List<ProgressListener> listeners = mRequestListeners.get(key);
154167
return request.newBuilder()
155-
.method(request.method(), new ProgressRequestBody(mHandler, request.body(), listeners))
168+
.method(request.method(), new ProgressRequestBody(mHandler, request.body(), listeners, mRefreshTime))
156169
.build();
157170
}
158171
return request;
@@ -173,7 +186,7 @@ public Response wrapResponseBody(Response response) {
173186
if (mResponseListeners.containsKey(key)) {
174187
List<ProgressListener> listeners = mResponseListeners.get(key);
175188
return response.newBuilder()
176-
.body(new ProgressResponseBody(mHandler, response.body(), listeners))
189+
.body(new ProgressResponseBody(mHandler, response.body(), listeners, mRefreshTime))
177190
.build();
178191
}
179192
return response;

progress/src/main/java/me/jessyan/progressmanager/body/ProgressRequestBody.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import okio.Okio;
1616
import okio.Sink;
1717

18-
import static me.jessyan.progressmanager.ProgressManager.REFRESH_TIME;
19-
2018
/**
2119
* 继承于{@link RequestBody},通过此类获取 Okhttp 上传的二进制数据
2220
* Created by jess on 02/06/2017 18:05
@@ -26,16 +24,18 @@
2624
public class ProgressRequestBody extends RequestBody {
2725

2826
protected Handler mHandler;
27+
protected int mRefreshTime;
2928
protected final RequestBody mDelegate;
3029
protected final ProgressListener[] mListeners;
3130
protected final ProgressInfo mProgressInfo;
3231
private BufferedSink mBufferedSink;
3332

3433

35-
public ProgressRequestBody(Handler handler, RequestBody delegate, List<ProgressListener> listeners) {
34+
public ProgressRequestBody(Handler handler, RequestBody delegate, List<ProgressListener> listeners, int refreshTime) {
3635
this.mDelegate = delegate;
3736
this.mListeners = listeners.toArray(new ProgressListener[listeners.size()]);
3837
this.mHandler = handler;
38+
this.mRefreshTime = refreshTime;
3939
this.mProgressInfo = new ProgressInfo(System.currentTimeMillis());
4040
}
4141

@@ -98,7 +98,7 @@ public void write(Buffer source, long byteCount) throws IOException {
9898
tempSize += byteCount;
9999
if (mListeners != null) {
100100
long curTime = SystemClock.elapsedRealtime();
101-
if (curTime - lastRefreshTime >= REFRESH_TIME || totalBytesRead == mProgressInfo.getContentLength()) {
101+
if (curTime - lastRefreshTime >= mRefreshTime || totalBytesRead == mProgressInfo.getContentLength()) {
102102
final long finalTempSize = tempSize;
103103
final long finalTotalBytesRead = totalBytesRead;
104104
final long finalIntervalTime = curTime - lastRefreshTime;

progress/src/main/java/me/jessyan/progressmanager/body/ProgressResponseBody.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import okio.Okio;
1616
import okio.Source;
1717

18-
import static me.jessyan.progressmanager.ProgressManager.REFRESH_TIME;
19-
2018
/**
2119
* 继承于{@link ResponseBody},通过此类获取 Okhttp 下载的二进制数据
2220
* Created by jess on 02/06/2017 18:25
@@ -26,15 +24,17 @@
2624
public class ProgressResponseBody extends ResponseBody {
2725

2826
protected Handler mHandler;
27+
protected int mRefreshTime;
2928
protected final ResponseBody mDelegate;
3029
protected final ProgressListener[] mListeners;
3130
protected final ProgressInfo mProgressInfo;
3231
private BufferedSource mBufferedSource;
3332

34-
public ProgressResponseBody(Handler handler, ResponseBody responseBody, List<ProgressListener> listeners) {
33+
public ProgressResponseBody(Handler handler, ResponseBody responseBody, List<ProgressListener> listeners, int refreshTime) {
3534
this.mDelegate = responseBody;
3635
this.mListeners = listeners.toArray(new ProgressListener[listeners.size()]);
3736
this.mHandler = handler;
37+
this.mRefreshTime = refreshTime;
3838
this.mProgressInfo = new ProgressInfo(System.currentTimeMillis());
3939
}
4040

@@ -82,7 +82,7 @@ public long read(Buffer sink, long byteCount) throws IOException {
8282
tempSize += bytesRead != -1 ? bytesRead : 0;
8383
if (mListeners != null) {
8484
long curTime = SystemClock.elapsedRealtime();
85-
if (curTime - lastRefreshTime >= REFRESH_TIME || bytesRead == -1 || totalBytesRead == mProgressInfo.getContentLength()) {
85+
if (curTime - lastRefreshTime >= mRefreshTime || bytesRead == -1 || totalBytesRead == mProgressInfo.getContentLength()) {
8686
final long finalBytesRead = bytesRead;
8787
final long finalTempSize = tempSize;
8888
final long finalTotalBytesRead = totalBytesRead;

0 commit comments

Comments
 (0)