zoukankan      html  css  js  c++  java
  • 文件下载---解决方案---类似360同步客户端

    需求:

    在某个文件管理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线程,让它们停止。

    ---------当多个文件被选中,多个文件要下载时--------------------------------------------

  • 相关阅读:
    MySQL0902作业(待巩固)
    Mysql之懵逼的一天
    sql查询语句详解
    MySQl语句总结
    0831练习作业(待纠正)
    0824MySQL
    Python数据分析——正则表达式
    Python数据分析——Beautiful Soup
    Python数据分析——requests使用
    Excle常用函数——Rank(统计排名)
  • 原文地址:https://www.cnblogs.com/ttylinux/p/3866655.html
Copyright © 2011-2022 走看看