zoukankan      html  css  js  c++  java
  • 【安卓面试题】多线程下载怎么实现?断点续传怎么实现?

    xUTILS插件

    最简单的方法 -- 使用 xUtils的 的HttpUitls下载文件,支持多线程断点下载

    下载地址 https://github.com/wyouflf/xUtils

    使用方法:

    HttpUtils http = new HttpUtils();
    HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
        "/sdcard/httpcomponents-client-4.2.5-src.zip",
        true, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
        true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
        new RequestCallBack<File>() {
    
            @Override
            public void onStart() {
                testTextView.setText("conn...");
            }
    
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                testTextView.setText(current + "/" + total);
            }
    
            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                testTextView.setText("downloaded:" + responseInfo.result.getPath());
            }
    
    
            @Override
            public void onFailure(HttpException error, String msg) {
                testTextView.setText(msg);
            }
    });
    
    ...
    //调用cancel()方法停止下载
    handler.cancel();
    ...
    

    注意 xUtils 已经更新到xUtils3 使用方法也有很多变化。参加官方文档: https://github.com/wyouflf/xUtils3

     

    使用HTTP协议实现多线程断点下载

    多线程实现思路:

    1. 发送http get请求到下载地址
    2. 获取文件总长度,创建和文件等长度的临时文件
    3. 用文件总长度除以线程数,计算每个线程的开始和结束位置
    4. 开启多线程, 按照位置开始下载数据
    5. 将下载数据存在临时文件的对应位置

    加断点

    1. 使用一个int变量记录下载当前总下载长度
    2. 下载时将该变量存入临时文件中
    3. 下次下载以该位置作为下载起点。
    4. 下载完毕后删除临时文件

    详细实现步骤参见: http://blog.csdn.net/guanhang89/article/details/51346790

  • 相关阅读:
    2016/4/7 省市县三级联动 下拉菜单式
    2016/4/5 Ajax ①用户名 密码 登陆 注册 ② 判断用户名是否已存在 ③点击按钮出现民族选项下拉菜单 ④DBDA类 加入Ajaxquery方法 数组变字符串 字符串拆分
    2016/4/2 json:js和jquery中轻量级数据交换格式 例: 窗口弹出 popwindow
    2016/4/1 jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色
    2016/4/1 PDO:: 数据访问抽象层 ? :
    2016/3/31 ①全选时 下面选项全选中 ② 下面不选中时 全选取消 ③在“” 中 转义字符的使用 onclick="Checkpa(this,'flall')"; ④区别于分别实现 重点在于两种情况合并实现
    2016/3/30 租房子 ①建立租房子的增、删、改php页面 ②多条件查询 ③全选时 各部分全选中 任意checkbox不选中 全选checkbox不选中
    正则表达式
    HTML总结
    深入理解CSS盒子模型
  • 原文地址:https://www.cnblogs.com/yidan621/p/5669128.html
Copyright © 2011-2022 走看看