MultiThreadDownLoad多线程下载

前言:

两种创建线程的方式:

第一种方式:使用Runnable接口创建线程。

第二种方式:直接继承Thread类创建对象。

     直接继承Thread类创建对象:(1)定义线程类(2)创建线程类对象(3)启动线程: 线程类对象.start();

用Runnanble 创建线程的步骤:1.定义一个Runnable接口类。2.在此接口类中定义一个对象作为参数run()方法。3.在run()方法中定义线程的操作。4.在其它类的方法中创建此Runnable接口类的实例对象,并以此实例对象作为参数创建线程类对象。5.用start()类方法启动线程。

MultiThreadDownLoad多线程下载:代码实现

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
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.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity {
	//通过tomact设置一个文件下载路径
    String path="http://172.28.21.32:8080/psiphon3.exe";
    int finishThread=0;
    //设置下载线程个数
    int threadcount=3;
    private ProgressBar pb;
    private TextView tv;
    //下载进度
    int downloadprogress=0;
    Handler handler=new Handler(){
    	public void handleMessage(android.os.Message msg) {
    		//通过设置文本显示下载进程
    		tv.setText((long)pb.getProgress()*100/pb.getMax()+"%");
    	};
    };
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pb=(ProgressBar) findViewById(R.id.progressBar);
		tv=(TextView) findViewById(R.id.textView1);
	}
	public void click(View v){
		Thread t=new Thread(){
			public void run(){
		try {
			URL url =new URL(path);
			HttpURLConnection conn=(HttpURLConnection) url.openConnection();
			//设置属性
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(8000);
			conn.setReadTimeout(8000);
			if(conn.getResponseCode()==200){
				//获取文件长度,便于分区间下载
				int length=conn.getContentLength();
				File file =new File(Environment.getExternalStorageDirectory(),getNameFromPath(path));
				RandomAccessFile raf=new RandomAccessFile(file, "rwd");
				raf.setLength(length);
				pb.setMax(length);
				raf.close();
				//计算线程区间
				int size=length/threadcount;
				for(int id=0;id

注意权限:



你可能感兴趣的:(安卓开发总结,android,多线程)