Android开发多线程断点续传下载器

guizhongyun 2011-10-02

使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线、电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载。这里采用数据库来记录下载的进度。

效果图

Android开发多线程断点续传下载器Android开发多线程断点续传下载器

断点续传

1.断点续传需要在下载过程中记录每条线程的下载进度

2.每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库

3.在每次向文件中写入数据之后,在数据库中更新下载进度

4.下载完成之后删除数据库中下载记录

Handler传输数据

这个主要用来记录百分比,每下载一部分数据就通知主线程来记录时间

1.主线程中创建的View只能在主线程中修改,其他线程只能通过和主线程通信,在主线程中改变View数据

2.我们使用Handler可以处理这种需求

主线程中创建Handler,重写handleMessage()方法

新线程中使用Handler发送消息,主线程即可收到消息,并且执行handleMessage()方法

动态生成新View

可实现多任务下载

1.创建XML文件,将要生成的View配置好

2.获取系统服务LayoutInflater,用来生成新的View

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

3.使用inflate(int resource, ViewGroup root)方法生成新的View

4.调用当前页面中某个容器的addView,将新创建的View添加进来

示例

进度条样式 download.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout   
  3.     xmlns:Android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="wrap_content"  
  6.     >  
  7.     <LinearLayout   
  8.         android:orientation="vertical"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_weight="1"  
  12.         >  
  13.         <!--进度条样式默认为圆形进度条,水平进度条需要配置style属性,  
  14.         ?android:attr/progressBarStyleHorizontal -->  
  15.         <ProgressBar  
  16.             android:layout_width="fill_parent"   
  17.             android:layout_height="20dp"  
  18.             style="?android:attr/progressBarStyleHorizontal"  
  19.             />  
  20.         <TextView  
  21.             android:layout_width="wrap_content"   
  22.             android:layout_height="wrap_content"  
  23.             android:layout_gravity="center"  
  24.             android:text="0%"  
  25.             />  
  26.     </LinearLayout>  
  27.     <Button  
  28.         android:layout_width="40dp"  
  29.         android:layout_height="40dp"  
  30.         android:onClick="pause"  
  31.         android:text="||"  
  32.         />  
  33. </LinearLayout>  

相关推荐