标签:
多线程断点下载
一、使用技术
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