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线程,让它们停止。

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

  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/ttylinux/p/3866655.html
Copyright © 2011-2022 走看看