首页 > 代码库 > 赵雅智_android多线程下载带进度条

赵雅智_android多线程下载带进度条

progressBar说明

在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。

 

XML重要属性

android:progressBarStyle:默认进度条样式

android:progressBarStyleHorizontal:水平样式

 

progressBar重要方法

getMax():返回这个进度条的范围的上限

getProgress():返回进度

getSecondaryProgress():返回次要进度

incrementProgressBy(int diff):指定增加的进度

isIndeterminate():指示进度条是否在不确定模式下

setIndeterminate(boolean indeterminate):设置不确定模式下

setVisibility(int v):设置该进度条是否可视

 

progressBar重要事件

onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

 

项目实现步骤分析

1.给进度调设置最大值

2.无论哪一个线程下载都要记录进度条当前位置,并设置值

3.给textview设置显示当前下载值

4.创建临时文件把以前下载好的位置记录起来

5.当线程下载完后删除临时保存进度条位置的文件

 

主要代码:

添加权限

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

布局文件 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android_download"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
	 <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.android_download.MainActivity"
            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>

</manifest>

StreamTools工具

android线程下载的工具一样http://blog.csdn.net/zhaoyazhi2129/article/details/27189465

Activity主要代码

package com.example.android_download;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.example.util.StreamTools;

public class MainActivity extends Activity {
	private int threadNum = 3;// 线程开启的数量
	private int threadRunning = 3;// 正在运行的线程
	private TextView tv_pb;
	private EditText et_url;
	private ProgressBar pb_download;
	private int currentPb;//当前值
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findView();

		File sdDir = Environment.getExternalStorageDirectory();
		File pdFile = new File(sdDir, "pb.txt");
		InputStream is = null;
		try {
			// 判断文件是否存在
			if (pdFile.exists()) {
				is = new FileInputStream(pdFile);
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (is != null) {
			String value = http://www.mamicode.com/StreamTools.streamToStr(is);>

补充知识点

不用在给进度条设置值的时候考虑同步,因为android定义progressBar的时候已经 设置了同步

 

2.当程序有多个线程访问一个变量,可以用synchronized解决

synchronized (MainActivity.this) {
							//进度条当前进度
							currentPb += len;
							pb_download.setProgress(currentPb);
							
							runOnUiThread(new Runnable() {
								
								@Override
								public void run() {
									tv_pb.setText("当前的进度是:"+currentPb*100/pb_download.getMax()+"%");
								}
							});


运行结果

1.当文件下载时,进度条显示和当前进度显示

 

2.当重新加载时继续上次下载

 

3.当文件进行下载时,临时存储下载文件位置的pb.txt被创建

 

4.当线程下载完毕后,在主线程Toast下载完毕

 

5.当下在完成后进度条走满,当前进度为100%

 

6.下载完后,临时文件销毁



源代码下载地址:http://download.csdn.net/detail/zhaoyazhi2129/7406731

转发请标明出处:http://blog.csdn.net/zhaoyazhi2129/article/details/27192169