android EventBus在下载上传速度过快5M/S时无法更新Dialog UI的下载进度
现象:能接收到,打印的进度文字也更新了,但显示出来的就是不变
只显示了最后一个值
后面经过多次调试,发现限制下载速度后能够更新显示的进度
下载速度限制使用的
Thread.sleep(1);时无法更新进度
Thread.sleep(5);时,可以更新进度
下载进度使用RxBus post到界面更新
最终主管确定限定下载速度不合理,因为限定下载速度与不限定,经过测试占用的内存都在180M左右
只限制 RxBus post 的次数 每隔 100 ms发送一次post
1 public class ProgressResponseBody extends ResponseBody { 2 private ResponseBody responseBody; 3 4 private BufferedSource bufferedSource; 5 private String tag; 6 7 public ProgressResponseBody(ResponseBody responseBody) { 8 this.responseBody = responseBody; 9 } 10 11 public ProgressResponseBody(ResponseBody responseBody, String tag) { 12 this.responseBody = responseBody; 13 this.tag = tag; 14 } 15 16 @Override 17 public MediaType contentType() { 18 return responseBody.contentType(); 19 } 20 21 @Override 22 public long contentLength() { 23 return responseBody.contentLength(); 24 } 25 26 @Override 27 public BufferedSource source() { 28 if (bufferedSource == null) { 29 bufferedSource = Okio.buffer(source(responseBody.source())); 30 } 31 return bufferedSource; 32 } 33 34 long oldTime = System.currentTimeMillis(); 35 36 private Source source(Source source) { 37 return new ForwardingSource(source) { 38 long bytesReaded = 0; 39 40 @Override 41 public long read(Buffer sink, long byteCount) throws IOException { 42 long bytesRead = super.read(sink, byteCount); 43 bytesReaded += bytesRead == -1 ? 0 : bytesRead; 44 // try { 45 // Thread.sleep(1); 46 // } catch (InterruptedException e) { 47 // e.printStackTrace(); 48 // } 49 long currntTime = System.currentTimeMillis(); 50 // KLog.i("------------------------>>> return "+(currntTime-oldTime)); 51 if (currntTime - oldTime < 100) { 52 // KLog.i("------------------------>>> return"); 53 } else { 54 oldTime = currntTime; 55 // KLog.i("------------------------>>> post data"); 56 //使用RxBus的方式,实时发送当前已读取(上传/下载)的字节数据 57 DownLoadStateBean infoBena = new DownLoadStateBean(contentLength(), bytesReaded, tag); 58 // KLog.i("--------->>> 总大小为 " + infoBena.getTotal() + " 一次读取的大小为 " + infoBena.getBytesLoaded()); 59 RxBus.getDefault().post(infoBena); 60 } 61 return bytesRead; 62 } 63 }; 64 } 65 }