断点续传---多线程下载进阶(一)
来源:互联网 发布:cf刷经验软件 编辑:程序博客网 时间:2024/06/05 21:49
打算总结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" /> <application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android: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();}}}}
0 0
- 断点续传---多线程下载进阶(一)
- 断点续传---多线程下载进阶(二)
- 断点续传---多线程下载进阶(三)
- Android进阶:多线程断点续传下载
- android 多线程断点续传下载 一
- android 多线程断点续传下载 一
- Android 多线程断点续传下载 一
- 断点续传和多线程下载(一)
- android 多线程断点续传下载 一
- Android 多线程断点续传下载 一
- android 多线程断点续传下载 一
- 多线程断点续传(一)
- java多线程下载网络资源(支持断点续传)
- Java多线程,断点续传下载(Android通用)
- JAVA多线程下载,断点续传(HTTP)
- HttpURLConnection之断点续传(多线程下载)
- 多线程断点续传后台下载
- 多线程断点续传后台下载
- hdu 1021 Fibonacci Again
- mysqld与mysqld_safe的区别
- Accelerated C++ 学习笔记2
- Ubuntu 操作
- POJ 题目3261 Milk Patterns(后缀数组求最长重叠至少k次的子串长度)
- 断点续传---多线程下载进阶(一)
- WingIDE 5的安装与破解方法
- HDU 5319(Painter-暴力)
- ListView和GridView的item自动改变边距!
- 动态规划求最长递增子序列
- socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信
- 键盘小钢琴[C语言][自制]
- 理解Linux系统中的load average
- jsp和Servlet区别