需求:
在某个文件管理Activity中,点击某个Item,就下载文件;
点击所有Item,将所有Item所对应的文件,逐个下载。
某个文件在下载时,界面要不断显示出下载进度。
服务器的文件和本地的文件是使用同一个目录,根360的同步客户端类似。
要注意的地方:
1.正在下载某个文件,但是该Activity销毁了。此时要中断文件的下载操作。
2.再次进入该文件管理Activity时,要判断出某个文件是否是有效的。
我的实现思路是这样:
文件管理Activity;文件下载DownloadLooper线程;本地文件大小检测DetectSizeLooper线程;
一个数据表FileInofoTable。
需要这个四个部分相互协作来完成功能。
具体思路:
1.进入文件管理Activity的时候,检测FileInfoTable是否存在,如果没有存在则创建该数据表。
2.在检测某个文件是否有效的时候,利用服务器传递过来的Item,检查本地是否存在该文件,如果存在,利用Item对象中字段序号值(唯一标识一个文件)去查FileInfoTable,判定该本地存放的文件是否是有效的。如果有效,则无需下载;如果无效,则删除。
----------点击单个文件,进行下载的实现流程------------------------------------------
0.启动一个DownloadLooper线程。
1.获取该Item,发送下载请求信息给DownloadLooper线程。DownloadLooper线程根据信息类型,执行下载操作。
2.DownloadLooper线程,在开启下载后,在接收到要下载的文件大小后,发送信息给DetectSizeLooper
线程;并且。DetectSizedLooper不断检测本地文件的大小,对比要下载的文件大小,并且不断发出更新信息给文件管理Activity,让它更新文件下载进度。
3.在DownloadLooper线程要结束之前,检测当地的文件大小,和要下载的文件大小,文件的序号,写到FileInfoTable中。----没有下载完毕,也保存。
4.当文件管理Activity,发现,本地文件大小和要下载的文件大小相等时,就发送两个消息,让DetectSizeLooper和DownloadLooper线程停止;并且将文件信息保存到FileInfoTable。
其它情况:
1).Activity,系统调用onDestroy方法时,发送两个消息给DetectSizeLooper和DownloadLooper线程,让它们停止。
----------点击单个文件,进行下载的实现流程------------------------------------------
---------当多个文件被选中,多个文件要下载时--------------------------------------------
0.启动一个DownloadLooper线程。
1.启动一个DetectSizeLooper线程。
2.维护一个下载队列,将所有待下载的Item都放到该队列中。
3.获取该Item,发送下载请求信息给DownloadLooper线程。DownloadLooper线程根据信息类型,执行下载操作。
4.DownloadLooper线程,在开启下载后,在接收到要下载的文件大小后,发送信息给DetectSizeLooper
线程;并且。DetectSizedLooper不断检测本地文件的大小,对比要下载的文件大小,并且不断发出更新信息给文件管理Activity,让它更新文件下载进度。
5.在DownloadLooper线程要结束之前,检测当地的文件大小,和要下载的文件大小,文件的序号,写到FileInfoTable中。----没有下载完毕,也保存。
6.文件管理Activity,接收到某个文件下载完毕的消息时,对比本地文件大小和要下载的文件大小,是否相等,若是,则保存信息到FileInfotable中,并且将当前Item从下载队列中移除,取出一个新的Item,再次重复上述过程;若已经没有可以取得队列,则发送消息,停止DownloadLooper线程和DetectSizeLooper线程。
其它情况:
1).Activity,系统调用onDestroy方法时,发送两个消息给DetectSizeLooper和DownloadLooper线程,让它们停止。
---------当多个文件被选中,多个文件要下载时--------------------------------------------
文件下载---解决方案---类似360同步客户端,布布扣,bubuko.com