android实现多线程下载实例
android实现多线程下载代码如下。
创新互联-专业网站定制、快速模板网站建设、高性价比迎泽网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式迎泽网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖迎泽地区。费用合理售后完善,10多年实体公司更值得信赖。
布局类
java代码如下
package cn.xhhkj.xhhkjtest;
import android.app.Activity;
import android.os.bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.progressbar;
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;
public class MainActivity extends Activity implements OnClickListener{
private String path = "http://192.168.0.101/7z1900x64x3610.exe";
private int threadCount = 4;
private EditText et_url;
private EditText et_count;
private button btn_down;
private LinearLayout ll_progress;
private int blockSize;
@Override
protected void onCreate(bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_url = (EditText) findViewbyId(R.id.et_url);
et_count = (EditText) findViewbyId(R.id.et_count);
btn_down = (button) findViewbyId(R.id.btn_download);
ll_progress = (LinearLayout) findViewbyId(R.id.ll_progress);
btn_down.setOnClickListener(this);
}
@Override
public void onClick(View v) {
ll_progress.removeAllViews();
String temp = et_count.getText().toString().trim();
int count = Integer.parseInt(temp);
for(int i= 0;i View.inflate(getApplicationContext(), R.layout.item, ll_progress); } new Thread(){ public void run() { try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(10000); int code = connection.getResponseCode(); if(code==200){ int length = connection.getContentLength(); RandomAccessFile file = new RandomAccessFile(getFileName(path), "rw"); file.setLength(length); blockSize = length/threadCount; for(int i =0;i int startIndex = i*blockSize; int endIndex = (i+1)*blockSize-1; if(i == threadCount-1){ endIndex = length-1; } progressbar pb = (progressbar) ll_progress.getChildAt(i); pb.setMax(endIndex-startIndex); new DownLoadThread(startIndex, endIndex, i).start(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } private class DownLoadThread extends Thread{ private int startIndex; private int endIndex; private int threadID; private progressbar pb; public DownLoadThread(int startIndex, int endIndex, int threadID) { this.startIndex = startIndex; this.endIndex = endIndex; this.threadID = threadID; this.pb = (progressbar) ll_progress.getChildAt(threadID); } public void run() { try { File temp = new File(getFileName(path)+threadID+".log"); if(temp!=null && temp.length()>0){ FileInputStream fis = new FileInputStream(temp); bufferedReader reader = new bufferedReader(new InputStreamReader(fis)); String result = reader.readLine(); startIndex = Integer.parseInt(result); } URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(10000); connection.setRequestproperty("Range", "bytes="+startIndex+"-"+endIndex); if(connection.getResponseCode()==206){ System.out.println("线程"+threadID+"开始下载"+startIndex); InputStream inputStream = connection.getInputStream(); int len = -1; byte[] buffer = new byte[1024*500]; RandomAccessFile file = new RandomAccessFile(getFileName(path), "rw"); file.seek(startIndex); int count=0; while((len=inputStream.read(buffer))!=-1){ file.write(buffer, 0, len); count+=len; int position = count+startIndex; pb.setprogress(position-threadID*blockSize); RandomAccessFile tempFile = new RandomAccessFile(getFileName(path)+threadID+".log", "rwd"); tempFile.write(String.valueOf(position).getbytes()); } file.close(); inputStream.close(); System.out.println("线程"+threadID+"下载结束"); if(temp!=null){ temp.delete(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private String getFileName(String path) { String[] result = path.split("/"); return getCacheDir().getAbsolutepath()+"/"+result[result.length-1]; } }
分享名称:android实现多线程下载实例
标题链接:http://scyanting.com/article/scdhes.html