Android 之多线程断点续传之(一)
来源:互联网 发布:网易课堂mac版 编辑:程序博客网 时间:2024/04/28 07:05
- 第一步:从布局文件下手.main.xml:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_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>
- <!-- 访问 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"/>
- 第二步:看看Activity
- public class MainActivity extends Activity {
- private ProgressBar pb1 = null;
- private TextView tv1 = null;
- private ProgressBar pb2 = null;
- private TextView tv2 = null;
- private String root = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
- private String downloadFile = "http://gongxue.cn/yingyinkuaiche/UploadFiles_9323/201008/2010082909434077.mp3";
- private String downloadFile1 = "http://gongxue.cn/yingyinkuaiche/UploadFiles_9323/201008/2010082909434077.mp3";
- // 声明已经读过的长度变量
- private int hasRead = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- pb1 = (ProgressBar) findViewById(R.id.progressBar1);
- tv1 = (TextView) findViewById(R.id.textView1);
- //
- pb2 = (ProgressBar) findViewById(R.id.progressBar2);
- tv2 = (TextView) findViewById(R.id.textView2);
- //
- download(downloadFile, root, pb1, tv1);
- download(downloadFile1, root, pb2, 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 ProgressBar progressBar;
- private 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 int hasDownload = 0;
- private int len = -1;
- private byte buffer[] = new byte[4 * 1024];
- private int size = 0;
- private int rate = 0;
- private MyHandler myHandler = null;
- private Message msg = null;
- 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;
- myHandler = new MyHandler(this.pb, this.tv);
- }
- public void run() {
- String 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) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- try {
- URL fileUrl = new URL(this.url);
- HttpURLConnection conn = (HttpURLConnection) fileUrl
- .openConnection();
- // 获取文件大小
- size = conn.getContentLength();
- InputStream is = conn.getInputStream();
- OutputStream os = new FileOutputStream(targetFileName);
- while ((len = is.read(buffer)) != -1) {
- os.write(buffer);
- hasDownload += len;
- rate = (hasDownload * 100 / size);
- msg = new Message();
- msg.arg1 = rate;
- myHandler.sendMessage(msg);
- System.out.println(rate + "%");
- }
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- 最后看看效果图吧:
0 0
- Android 之多线程断点续传之(一)
- Android多线程系列之多线程下载之断点续传
- Android之多线程下载及断点续传
- Android 断点续传进阶之多线程下载
- android开发之多线程下载断点续传
- Android之断点续传(一)
- android之多线程工作(一)AsyncTask
- Android开发之多线程下载(一)
- android开发笔记之多线程下载及断点续传
- Android之多线程解析(一)之Thread、Runnable
- Java之多线程(一)
- JAVA之多线程(一)
- Java之多线程(一)
- Android 断点续传基础之单线程下载
- android线程之多线程
- Java基础笔记之多线程(一)
- java专题(一)之多线程
- Java之多线程学习(一)
- 建立学习型组织 - 解决了我几年的困惑
- mongoVUE1.5完全破解版赠送
- python安装Pillow
- php开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
- 使用Regex.Replace()进行字符串的替换
- Android 之多线程断点续传之(一)
- 虚拟盘符DefineDosDevice--发文于2013-11-18
- HDU 1722 Cake【规律+数学】
- long polling
- MongoDB学习笔记(一) MongoDB介绍及安装
- Ubuntu 下载与 Android 源码环境搭建
- [乡土民间故事_徐苟三传奇]第二回_巧答言长工骂财主
- 简单01背包 完全背包
- ZOJ 1679