android 多线程 源码,【Android中的Http通信】3-1 android多线程下载实例(源码)

1、DownLoad

public class DownLoad {

private Executor thredPool = Executors.newFixedThreadPool(3);

public static int finishedThread=0;

static class DownLoadRunnable implements Runnable{

private String url;

private String fileName;

private long start,end;

private TextView mTextView;

private Handler mHandler;

public DownLoadRunnable(String url, String fileName, long start,

long end,Handler mHandler,TextView mTextView) {

super();

this.url = url;

this.fileName = fileName;

this.start = start;

this.end = end;

this.mTextView = mTextView;

this.mHandler = mHandler;

}

@Override

public void run() {

try {

HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

conn.setRequestProperty("Range", "bytes="+start+"-"+end);

RandomAccessFile raf = new RandomAccessFile(new File(fileName), "rwd");

raf.seek(start);

InputStream is = conn.getInputStream();

byte[] buffer = new byte[1024];

int len=0;

while((len=is.read(buffer))!=-1){

raf.write(buffer,0,len);

}

if(raf!=null){

raf.close();

}

if(is!=null){

is.close();

}

finishedThread++;

if(finishedThread==3){

mHandler.post(new Runnable() {

@Override

public void run() {

mTextView.setText("下载完成!");

}

});

}

} catch (ProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public void downFile(String path,Handler mHandler,TextView mTextView) throws Exception{

HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

int count = conn.getContentLength();

int block = count/3;

String fileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/1.rar";

for(int i=0;i<3;i++){

long start = i*block;

long end = start+block-1;

if(i==2){

end = count;

}

DownLoadRunnable mRunnable = new DownLoadRunnable(path, fileName, start, end,mHandler,mTextView);

thredPool.execute(mRunnable);

}

}

}

2、MainActivity

public class MainActivity extends Activity {

private TextView mTextView;

private Handler mHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextView = (TextView) findViewById(R.id.textView);

mHandler = new Handler();

new Thread(){

public void run() {

DownLoad load = new DownLoad();

try {

load.downFile("http://file02.daimg.com/2012/photo/1206/DAimG_2012062679170543R693.rar",mHandler,mTextView);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

}

打开App,阅读手记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值