码迷,mamicode.com
首页 > 编程语言 > 详细

多线程断点下载

时间:2016-08-10 16:09:55      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

 

                              多线程断点下载

一、使用技术

HttpUrlConnection、线程、数据库、同步线程

二、步骤

1)在本地为下载的内容腾出空间。即在本地创建与服务器大小相同的临时文件。

2)计算分配几个线程取下载资源,知道每个线程下载文件的起始位置。

3)开启多个线程,每个线程下载对应位置的文件。

4)等所有的线程把自己的数据下载完,就把要下载的服务器上的资源下载到本地了。

5)当文件都下载到本地,使用RandomAccessFile(随机文件访问类)把各个线程下载的文件串起来。如我们下载视频到最后开启做好的线程进行下载。

三、代码示例

1、展示数据

public void show(final String reasorsurl){

new Thread(){

public void run(){

try {

URL url=new URL(reasorsurl);

HttpURLConnection http=(HttpURLConnection) url.openConnection();

http.setRequestMethod("GET");

http.setReadTimeout(5000);

http.setConnectTimeout(5000);

int code=http.getResponseCode();

if(code==200){

InputStream in=http.getInputStream();

PullParserTools pull=new PullParserTools();

ArrayList<SoftwareClass> list=pull.getList(in);

adapter=new MyAdapter(list,MainActivity.this,IP);

runOnUiThread(new Runnable() {

@Override

public void run() {

lv.setAdapter(adapter);

}

});

}

} catch (MalformedURLException e) {

e.printStackTrace();

}catch (IOException e) {

e.printStackTrace();

}

}

}.start();

}

2、图片加载

public class SmartImageView extends ImageView{

 

private Handler hand=new Handler(){

public void handleMessage(android.os.Message msg) {

Bitmap bb=(Bitmap) msg.obj;

SmartImageView.this.setImageBitmap(bb);

};

};

 

 

public SmartImageView(Context context) {

super(context);

}

public SmartImageView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public SmartImageView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

 

public void setImage(final String imageurl){

 

new Thread(){

public void run(){

try {

URL url=new URL(imageurl);

HttpURLConnection http=(HttpURLConnection) url.openConnection();

http.setRequestMethod("GET");  //设定提交方式

http.setReadTimeout(5000);    //连接的读取时间

http.setConnectTimeout(5000);

int code=http.getResponseCode();   //返回的状态码

if(code==200){

InputStream in=http.getInputStream();

Bitmap bit=BitmapFactory.decodeStream(in);

//发送hand信息

Message msg=Message.obtain();

msg.obj=bit;

hand.sendMessage(msg);

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}.start();

}

}

 

四、问题

1、线程叠加问题

 在创建数据库使用单例模式。

 dao层方法使用synchronized同步线程 。

 使用RandamAccessFile‘

 数据库使用单例模式构建

多线程断点下载

标签:

原文地址:http://www.cnblogs.com/sangfan/p/5756945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!