zoukankan      html  css  js  c++  java
  • 实现android支持多线程断点续传下载器功能

    多线程断点下载流程图:



     


     

    多线程断点续传下载原理介绍:

    在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度
    手机端下载数据时难免会出现无信号断线、电量不足等情况,所以需要断点续传功能
    根据下载数据长度计算每个线程下载的数据位置,程序中开启多个线程并发下载
    在请求头中设置Range字段就可以获取指定位置的数据,例如:Range: bytes=100-200
    在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,下次启动时从记录位置继续下载

    实例图:
     


    一. 进度条使用进行配置
    1.1 默认为圆形进度条,水平进度条需要配置style属性,android:attr/progressBarStyleHorizontal
          使用android.R.attr.progressBarStyleHorizontal作为样式
    1.2 当点击下载按钮时开启多线程下载,下载过程中修改进度条进度
          设置最大刻度:setMax()
          设置当前进度:setProgress()

    二. 断点续传
    2.1 断点续传需要在下载过程中记录每条线程的下载进度 (保存在 文件名.temp文件中 同迅雷中的.temp文件的功能)

    2.2 每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库
    2.3 在每次向文件中写入数据之后,在数据库中更新下载进度
    2.4 下载完成之后删除数据库中下载记录(文件名.temp文件)

    三. Handler传输数据
    3.1 主线程中创建的View只能在主线程中修改,其他线程只能通过和主线程通信,在主线程中改变View数据
    3.2 我们使用Handler可以处理这种需求
    3.3 主线程中创建Handler,重写handleMessage()方法
    3.4 新线程中使用Handler发送消息,主线程即可收到消息,并且执行handleMessage()方法

    原文转载:http://android.662p.com/thread-4516-1-1.html

  • 相关阅读:
    HDU 1165 Eddy's research II (推公式)
    HDU 1394 Minimum Inversion Number (线段树&&暴力)
    HDU 2845 Beans (最大不连续子序列和)
    CodeForces 369A Valera and Plates( 水)
    HDU 1241 Oil Deposits(dfs)
    hdu 1016 Prime Ring Problem(dfs)
    hdu 5138 CET-6 test(水)
    ZOJ 3693 Happy Great BG(卡精度)
    HDU 1028 Ignatius and the Princess III(dp 母函数)
    CodeForces 432B Football Kit(水)
  • 原文地址:https://www.cnblogs.com/chenkaiyuan/p/3606907.html
Copyright © 2011-2022 走看看