打算总结7篇笔记。来学习下断点续传---多线程下载进阶

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="sms.down"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="9" /><applicationandroid:icon="@drawable/icon"android:label="@string/app_name" ><activityandroid:name=".MulThreadDownload"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><!-- 訪问 internet 权限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.SEND_SMS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /></manifest>

main.xml

<?

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ProgressBar> <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ProgressBar> <TextView android:id="@+id/textView2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>

MulThreadDownload

package sms.down;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import android.widget.TextView;public class MulThreadDownload extends Activity {// 下载进度条1private ProgressBar pb1 = null;private TextView tv1 = null;// 下载进度条2private ProgressBar pb2 = null;private TextView tv2 = null;// 下载后存放的文件夹地址private final String root = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;// 网络资源Url地址信息private final String downloadFile = "http://gongxue.cn/yingyinkuaiche/UploadFiles_9323/201008/2010082909434077.mp3";private final String downloadFile1 = "http://gongxue.cn/yingyinkuaiche/UploadFiles_9323/201008/2010082909434077.mp3";public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main);this.pb1 = (ProgressBar) this.findViewById(R.id.progressBar1);this.tv1 = (TextView) this.findViewById(R.id.textView1);this.pb2 = (ProgressBar) this.findViewById(R.id.progressBar2);this.tv2 = (TextView) this.findViewById(R.id.textView2);this.download(this.downloadFile, this.root, this.pb1, this.tv1);this.download(this.downloadFile1, this.root, this.pb2, this.tv2);}/*** 開始线程进行下载 參数:网络资源地址,存放的文件夹。进度条。提示的文本信息*/private void download(String url, String targetPath, ProgressBar pb,TextView tv) {DownloadThread dt = new DownloadThread(url, targetPath, pb, tv);dt.start();}// 自己定义一个Handler类。处理线程消息public class MyHandler extends Handler {private final ProgressBar progressBar;private final TextView textView;// 通过构造函数来确定给哪个ProgressBar刷新public MyHandler(ProgressBar progressBar, TextView textView) {this.progressBar = progressBar;this.textView = textView;}public void handleMessage(Message msg) {this.progressBar.setProgress(msg.arg1);this.textView.setText(msg.arg1 + "%");super.handleMessage(msg);}}// 下载线程public class DownloadThread extends Thread {private String url = "";private String targetPath = "";private ProgressBar pb = null;private TextView tv = null;public DownloadThread(String url, String targetPath, ProgressBar pb,TextView tv) {this.url = url;this.targetPath = targetPath;this.pb = pb;this.tv = tv;this.myHandler = new MyHandler(this.pb, this.tv);}// 初始化下载总大小为0private int hasDownload = 0;// 文件大小private int size = 0;// 下载比例private int rate = 0;// 读写流须要的private int len = -1;private final byte buffer[] = new byte[4 * 1024];private MyHandler myHandler = null;private Message msg = null;@Overridepublic void run() {// http://gongxue.cn/yingyinkuaiche/UploadFiles_9323/201008/2010082909434077.mp3String targetFileName = this.targetPath+ this.url.substring(this.url.lastIndexOf("/") + 1,this.url.length());File downloadFile = new File(targetFileName);// 文件不存在。就进行创建工作if (!downloadFile.exists()) {try {downloadFile.createNewFile();} catch (IOException e) {e.printStackTrace();}}try {// 获取URL地址URL fileUrl = new URL(this.url);// 打开连接HttpURLConnection conn = (HttpURLConnection) fileUrl.openConnection();// 获取文件大小this.size = conn.getContentLength();// 获取输入流InputStream is = conn.getInputStream();// 创建一个输出流OutputStream os = new FileOutputStream(targetFileName);while ((this.len = is.read(this.buffer)) != -1) {// write(byte[] buffer)os.write(this.buffer);// 通过循环读取的,进而改变下载量--更新下载进度this.hasDownload += this.len;// 获取下载比例this.rate = (this.hasDownload * 100 / this.size);// 创建消息对象this.msg = new Message();// 携带下载比例this.msg.arg1 = this.rate;// 发送消息this.myHandler.sendMessage(this.msg);System.out.println(this.rate + "%");}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}

断点续传---多线程下载进阶(一)相关推荐

  1. 安卓day29网络编程 HttpClient AsyncHttpClient 断点续传多线程下载器 HttpUtils

    一.排坑 HttpClient.Header飘红 Android 6.0 已经移除了httpClient module下的build.gradle中加入: android{useLibrary 'or ...

  2. 如何实现 HTTP 断点续传多线程下载

    1. HTTP断点续传多线程下载 一个比较常见的场景,就是断点续传/下载,在网络情况不好的时候,可以在断开连接以后,仅继续获取部分内容. 例如在网上下载软件,已经下载了 95% 了,此时网络断了,如果 ...

  3. curl命令断点续传多线程下载文件

    新版本发布 curl命令7.66.0版本支持多线程下载 参考:https://daniel.haxx.se/blog/2019/09/11/curl-7-66-0-the-parallel-http- ...

  4. php文件断点续传,php文件下载限速,文件断点续传,多线程下载文件原理解析

    文件下载限速 首先,我们写一段使用php输出文件给浏览器下载的代码<?php /** * Created by PhpStorm. * User: tioncico * Date: 19-2-4 ...

  5. android 多线程下载,断点续传,线程池

    android 多线程下载,断点续传,线程池 你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效 ...

  6. android多线程下载原理,安卓多线程断点续传下载功能(靠谱第三方组件,原理demo)...

    一,原生的DownloadManager 从Android 2.3(API level 9)开始,Android以Service的方式提供了全局的DownloadManager来系统级地优化处理长时间 ...

  7. java多线程下载_Java实现多线程下载,支持断点续传

    多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内容.虽然实现了多线程及断点续传,但还有很多不完善的地方. 包含四个类: Downloa ...

  8. 【Android】多线程下载加断点续传

    http://blog.csdn.net/smbroe/article/details/42270573 文件下载在App应用中也用到很多,一般版本更新时多要用的文件下载来进行处理,以前也有看过很多大 ...

  9. java 多线程下载文件并实时计算下载百分比(断点续传)

    多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...

最新文章

  1. 零基础参加java培训的系统学习路线
  2. URLRewriter在ASP.NET配置文件中的用法
  3. 【组队学习】【31期】基于Python的办公自动化
  4. 获取本地公网ip_本地与远程linux服务器之间传输数据
  5. 视频处理的知识_开源项目_项目列表
  6. Spring OXM-XStream快速入门
  7. 添加nginx为系统服务(service nginx start/stop/restart)
  8. 图像传感器与信号处理——详解图像传感器噪声
  9. iptables下开放ftp连接端口
  10. [USACO19JAN,Platinum]Train Tracking 2
  11. 码农和程序员的几个重要区别!
  12. 【Java基础】 JQuery的常用操作
  13. php中的boolean(布尔)类型
  14. php 请除目录下的日志文件,PHP碎码——删除除指定文件的其他文件及目录
  15. 利用搜索引擎实现关键词爬取内容
  16. 奥特曼在银行里下象棋的梗
  17. 未来计算机作文想象,想象未来作文450字
  18. 程序员们的薪酬待遇大起底,如何提高自己的收入?
  19. JNPF 3.1升3.2新版本内,拉姆达表达式内时间比较
  20. pca人脸特征降维的过程理解及matlab编程实现

热门文章

  1. 腾讯AI Lab两大算法刷新人脸识别与检测纪录,秉承「基础研究+落地应用」之路
  2. 联想PC被华为反超,杨元庆“美梦”或将破碎,余承东:对手较弱
  3. 大厂AI面试官一语中的:一场面试暴露了你的机器学习水平
  4. 外媒:苹果自动驾驶裁员表明其AI战略发生巨变
  5. 地平线将融资10亿美元,或创AI芯片融资纪录
  6. 清华大学精密仪器系:智能传感器太重要了!
  7. 对我国6G早期研究布局的几点建议
  8. 5G将如何推动未来十年智能城市的发展
  9. 太阳系“首个星际访客”未被探测到人工信号
  10. 超20亿!2018年国家自然科学基金(重点项目)出炉!