项目中有大容量得文件需要下载,服务器连接得设备比较多,同时下载得话,服务器肯定是受不了了,当时有两种想法

1: 限速下载

2:排队下载

虽然最后采用得是第二种方式,我也把第一种也实现了,记录下,分享给需要得朋友.

源码地址:实现了端点续传,和限速,这只是个demo,可以进行二次封装

切记,切记,切记

后边维护了一次,下载源码之后,覆盖下面一段代码到

FileDownloadHandler这个类里面,目前可以实现误差10 kb/s 还是比较好用得。

链接:https://download.csdn.net/download/fkgjdkblxckvbxbgb/11233046

当时去github上,有一位仁兄写的挺好得,但是由于项目里面一直用得是XUtil,用了几年,还比较稳定,不想换代码,死来想去,就去看了他得逻辑,修改了一下XUtil下载那一块得代码.

代码封装得还是挺完整,传入下载地址,保存位置,和一个回调监听,回调里面有下载状态回显

runnable.setIsDelFile(false);  //不要删除上次未下载完毕,断点续传
runnable.setLimitDownSpeed(limitSpeed);  //设置下载速度

这里如果设置了限制速度,那么是有限制得,如果不传入速度,那么就是不限速下载:主要代码不多,下载还是有一点点误差,因为Thread 睡眠得时间必须是整数,这个没办法了 。

原理比较简单,就是在文件流里面加了一个线程等待延时,具体得时间是根据设置得速度来计算,具体需要看详细源码得,直接下载代码看吧.

  while ((len = bis.read(bytes)) != -1) {long currentTime = System.currentTimeMillis();bos.write(bytes, 0, len);current += len;if (callBackHandler != null) {if (!callBackHandler.updateProgress(total, current, false)) {return targetFile;}}//=======================================================================//2000 Kb限速。其他的不限速if (LimitSpeed > 0 && LimitSpeed < 2001) {long distanceSize = current - lastSave;if (distanceSize > LimitSpeed * 512) {long distanceTime = lastSaveTime + 1000 - currentTime;try {if (distanceTime > 100) {Thread.sleep(distanceTime);}} catch (Exception e) {e.printStackTrace();}lastSaveTime = currentTime;lastSave = current;}}//=======================================================================}
package com.zxj.udp_playsync;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;import com.demo.DownFileEntity;
import com.demo.DownRunnable;
import com.demo.DownStateListener;public class MainActivity extends Activity implements View.OnClickListener {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}EditText et_speed_limit;TextView tv_statues;Button btn_down;Button btn_cacel;ProgressBar progressBar;private void initView() {tv_statues = (TextView) findViewById(R.id.tv_statues);et_speed_limit = (EditText) findViewById(R.id.et_speed_limit);btn_down = (Button) findViewById(R.id.btn_down);btn_cacel = (Button) findViewById(R.id.btn_cacel);btn_down.setOnClickListener(this);btn_cacel.setOnClickListener(this);progressBar = (ProgressBar) findViewById(R.id.progressBar);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btn_down:startDown();break;case R.id.btn_cacel:cacelDown();et_speed_limit.setText("-1");break;}}DownRunnable runnable;private void startDown() {String downUrl = "http://dlied5.myapp.com/myapp/1104466820/sgame/2017_com.tencent.tmgp.sgame_h8931_1.44.1.19_716664.apk";String savePath = "/sdcard/wzry.apk";runnable = new DownRunnable(downUrl, savePath, new DownStateListener() {@Overridepublic void downStateInfo(DownFileEntity entity) {int speed = entity.getDownSpeed();int progress = entity.getProgress();int statues = entity.getDownState();progressBar.setProgress(progress);String showDesc = "速度: " + speed + " / 进度=" + progress + " /时间" + System.currentTimeMillis();switch (statues) {case DownFileEntity.DOWN_STATE_START:showDesc = "开始下载 ==>" + showDesc;break;case DownFileEntity.DOWN_STATE_PROGRESS:showDesc = "下载中 ==>" + showDesc;break;case DownFileEntity.DOWN_STATE_SUCCESS:showDesc = "下载完成 ==>" + showDesc;break;case DownFileEntity.DOWN_STATE_FAIED:showDesc = "下载中断 ==>" + showDesc;break;}tv_statues.setText(showDesc);}});int limitSpeed = Integer.parseInt(et_speed_limit.getText().toString().trim());runnable.setIsDelFile(false);  //不要删除上次未下载完毕,断点续传runnable.setLimitDownSpeed(limitSpeed);  //设置下载速度Thread thread = new Thread(runnable);thread.start();}public void cacelDown() {if (runnable != null) {runnable.stopDown();}}}

Android 实现限速下载相关推荐

  1. 某度网盘不限速下载,这里有个新方法~

    今天,给大家分享一个方法,即使你不是百度网盘VIP,也可拥有会员的下载速度. 某度网盘不限速下载方法 速度测试效果如下: 适用手机:安卓 使用方法: 1.安卓手机下载百度网盘APP,然后选择需要下载的 ...

  2. baidupcsgo安卓_百度网盘不限速下载器BaiduPCS-Go如何使用?

    Baidupcs-go是个开源免费的百度网盘下载工具,虽然没有用户界面需要命令行操作但是功能相当相当丰富.平台方面支持Windows.Mac.Android.pnux甚至iOS,如果你日常使用百度网盘 ...

  3. 图形引擎实战:手游Android端后台下载技术分享

    一.功能特点 手游android端后台下载SDK是畅游自主研发的一款移动平台android端后台文件下载工具包,它主要提供网络文件的后台下载功能,功能完善,性能高,可以满足游戏制作有关后台下载文件的需 ...

  4. android源码下载方法 批量下载 基于windows os

    安装win版的Gitbash, 在这里 http://msysgit.googlecode.com/files/Git-1.6.0.2-preview20080923.exe. 选择默认安装路径(否则 ...

  5. I.MX6 android 源码下载

    /************************************************************************** I.MX6 android 源码下载* 说明:* ...

  6. BCH收银APP已在Android系统上下载超10000次

    Bitcoin Cash Register 近日,"比特币耶稣"Roger Ver在BCH论坛r/reddit发帖称,BCH收银APP"Bitcoin Cash Regi ...

  7. Xamarin.Form的Android SDK工具下载安装

    Xamarin.Form的Android SDK工具下载安装 本节将讲解如何下载Xamarin.Form的Android SDK工具,并使用其中的工具管理Android SDK,如何创建模拟器等内容. ...

  8. 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )

    文章目录 一.下载 p7zip 源码 二.交叉编译 Android 中使用 7z 可执行程序 三.参考资料 一.下载 p7zip 源码 下载 7zip 源码 , 下载页面 https://source ...

  9. 高通android开源代码下载

    高通android开源代码下载 开源网站https://www.codeaurora.org/projects/all-active-projects/android-msm,选择wiki,在Wiki ...

最新文章

  1. Windows10下python-pcl的安装步骤说明,亲测ok
  2. js事件详解二:鼠标和滚轮事件
  3. java配置运行环境和配置
  4. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE
  5. 使用微服务失败的12个原因
  6. 01串(51Nod-1391)
  7. 没学过编程可以学python吗_没编程基础可以学python吗
  8. IPV6:移动光猫吉比特GM228-S 桥接+IPV6教程
  9. 直方图与直方图均衡化
  10. 五星大饭店续集剧情大放送(最新更新)
  11. 灵敏度分享码显示服务器不可用,和平精英灵敏度分享码怎么使用 复制高玩主播灵敏度方法...
  12. PHPExcel设置单元格值下拉选择
  13. node nvm 安装及使用
  14. [转载] Ruby、Rails、Agile的启示
  15. php活体检测,双目活体检测摄像头,人脸识别SDK,红外活体算法
  16. java实体类包怎么命名,程序那些事
  17. 75 道 JavaScript 面试题
  18. “钱多多”软件用户调查问卷的调查报告
  19. 解决WIN10下应用商店不能用,闪退的情况
  20. Javascript(jQuery)中绑定页面上所有按钮点击事件的几种方式

热门文章

  1. 京麦微信小程序圣诞抽奖项目的架构设计
  2. InsecureRequestWarning: Unverified HTTPS request is being made to host ‘api.ai.qq.com‘. Adding
  3. JDBC操作1:实现对数据库crud操作
  4. Python爬取知乎回答和图片
  5. Android系列学习进阶视频,2022年互联网大厂Android笔经
  6. 宅男之品味生活节奏篇
  7. Linux安装ffmpeg脚本
  8. 天生最感性的诱惑,这是你香喷喷的鸡哟
  9. 他爱在黑暗中漫游(来自《德国诗选》)
  10. oracle oaf结构,配置Oracle ebs的oaf开发环境步骤详解