CHANGELOG-ZH.md
2019-02-20
2018-08-03
JobScheduler来执行下载事务,只能通过startService,引起 "Not allowed to start service Intent..." 的问题。 closes #1078Content-Disposition中的非UTF-8编码。 closes #1057416的情况`。 closes #10502018-05-19
2018-04-20
修复: 修复由于在下载结束时fd没有被主动释放,导致当有大量的任务被不断的发起执行时有可能引发的OOM问题。
2018-03-14
0的时候,回调错误,修改为直接回调完成。closes #789Content-Range字段,但是提供Content-Length字段时,计算出的总长度始终是1的问题。Content-Length字段时,使用隐藏在Content-Range中的内容大小数据。 closes #9672018-02-05
HEAD方法的时候,返回405响应状态导致下载失败的问题。 close #9422018-02-01
pending状态回调时带回来已经被弃用的sofar-bytes。 close #884filename没有用"包裹时,无法通过content-dispostion获取文件名的问题。 close #908setCallbackProgressTimes设置的次数不能正常生效的问题。 close #9010-infinite的Range导致下载了无用内容到tcp-window的问题。close #933ending的时候再次主动关闭输入流,防止输入流泄漏特别是对于试探连接来说。Range是正确的,但是后端却返回416时,将完全弃用Range请求头。close #921HEAD的请求替代GET方法,提高试探通信效率。 ref #933如果你正在使用filedownloader-okhttp3-connection,请将其更新到1.1.0版本来适配1.7.0版本。
2017-12-16
FileDownloadSerialQueue遇到的死锁。 closes #858j-unit,避免在一些小米手机上发生no-static-method-found的问题。 closes #867pending的时候暂停任务,而后获取到该任务都是pending的状态的问题。 closes #855SqliteDatabaseImpl、RemitDatabase、NoDatabaseImpl,便于上层覆盖他们。User-Agent的时候,内部添加默认的User-Agent。 closes #848RemitDatabase作为默认的数据库,在很多小任务很快的结束下载(2s内),其数据库操作将会变得十分冗余,而这部分的数据库操作将被取消FileDownloader中大多数数据库长尾问题,是由于有很多很小的任务同时执行:
而相比之下写入数据库是为了断点续传,这个短期的频繁数据库操作,实质的作用甚微,早期的提供外接接口来控制下载进度间的入库频率显然无法覆盖该问题。
因此,还是为FileDownloader推出新的RemitDatabase用于解决该问题,除去期间的多线程安全问题的处理,核心思想如下:
2017-10-13
isAlive不可靠导致的问题。 this closes #793status并且DownloadStatusCallback的sendMessage无法保证有序性,导致下一次启动时最终状态是process无法断点续传(具体原因参看这里)。 this refs #793, #764, #721, #769, #763, #761, #716pause时,有可能出现it can't take a snapshot for the task xxx错误的问题。416的问题。2017-10-12
error与pause的状态被运行中的状态覆盖导致下次断点续传失败。 closes #769, closes #764, closes #761, closes #763, closes #721, closes #7162017-09-29
FileDownloader#clearAllTaskData并没有清理连接表的问题。 Closes #754BufferedOutputStream来优化默认输出流,现在虚拟机内的缓存大小为8192字节。2017-09-11
%d格式化AtomicLong导致IllegalFormatConversionException的问题。 Closes #7432017-08-21
NoDatabaseImpl: 为了有些用户需要一个没有数据库的FileDownloader的用户。 Refs #727AtomicLong代替锁的方式,使得下载进度递增性能更好。2017-07-29
pause极小概率出现NPE的问题。 Closes #680FileDownloaderSerialQueue的时候,其已经完成了该操作,出现MissingFormatArgumentException的问题。 Closes #6992017-07-16
2017-07-13
content-length不等于通过Range计算出来的content-length时直接抛回GiveUpException而不继续下载。 Closes #636sync了一次的问题。2017-07-07
2017-07-04
INSTALL_FAILED_DUPLICATE_PERMISSION的问题,这个问题是因为在1.5.7版本中我们申明了一个接收结束广播的权限导致,现在我们移除了这个权限申明来修复这个问题。Closes #6412017-06-28
2017-06-25
filedownloader.properties中配置broadcast.completed: 决定是否需要在任务下载完成后发送一个完成的广播。 Closes #605FileDownloadSerialQueue支持暂停与继续功能. Closes #547FileDownloader#init取而代之的是FileDownloader#setup,现在如果你不需要定制组件,就只需要在使用FileDownloader之前的任意使用调用这个方法就行。 Closes #500
- 如果你使用
broadcast.completed并且接收任务完成的广播,你需要在AndroidManifest中注册Action为filedownloader.intent.action.completed的广播并且使用FileDownloadBroadcastHandler来处理接收到的Intent。- 现在, 不再使用
FileDownloader#init, 取而代之的,如果你需要注册你的定制组件,你需要在Application#onCreate中调用FileDownloader.setupOnApplicationOnCreate(application):InitCustomMaker, 否则你只需要在使用FileDownloader之前的任意时候调用FileDownloader.setup(Context)即可。
FileDownloadQueueSet无法处理使wifi-required失效的操作。 感谢 @qtstcidGenerator一起使用)。 Closes #6172017-06-18
findRunningTaskIdBySameTempPath的同时请求了暂停可能导致NPE奔溃的问题。 Closes #613206并且它的ETAG发生变化时导致IllegalArgumentException错误奔溃的问题。 Closes #612FileDownloadNetworkPolicyException未处理导致奔溃的问题。 感谢 @qtstcv1.4.3升级到v1.5.2并且在一些其他综合因素下(具体可以参见 #610 ) 初始化数据库时出现IllegalStateException错误奔溃的问题。Closes #610IllegalStateException奔溃的问题。connected回调之后,多线程下载建立连接,此时在检验连接与数据获取连接期间服务端数据发生错误或变更导致启动下载后没有响应的问题。error。 Closes #542416的情况。 Refs #6122017-06-12
download.max-network-thread-count参数没起作用,并同时下载任务无上限的问题。 Closes #6072017-06-11
IdGenerator支持了定制下载任务id生成器。 Closes #224FileDownloadModel的维护从FileDownloadDatabase中解藕,让FileDownloadDatabase只关心数据库相关操作。2017-06-08
connected与completed几乎同时回调时发生divide by zero异常的问题。 Refs #601FetchDataTask已经被创建并请求执行,但是还没有来得及被执行,导致NPE奔溃的问题。 Closes #6012017-06-07
error或者被暂停时,刚好该任务的某个或几个链接完成下载,此时遇到NPE或者是ConcurrentModificationException的异常。Closes #598FetchDataTast失败,此时遇到NPE的异常。Refs #598FinishListener时,此时下载速度始终是0的问题。FinishListener,此时FinishListener的over方法不会被回调到的问题。fsync())。2017-06-05
FileDownloader.init中,当没有提供InitCustomMaker时出现的NPE奔溃。 Closes #592pending中没有带回其正确的sofarBytes的问题。IDownloadSpeed.Monitor在断点续传下总平均速度不准确的问题。FileDownloader.init中提供的context为空时,抛IllegalArgumentException以更早的暴露问题。2017-06-05
ConnectionCountAdapter定制对每个任务使用连接(线程)数据的定制(可以通过FileDownloader#init设置进去)FileDownloadRunnable。对于每个任务默认的连接(线程)数目策略,你可以通过ConnectionCountAdapter来定制自己的策略:
2017-05-07
FileDownloader#init(Application), 因为Application是 Context的实现。2017-03-15
PathConflictException来拒绝启动。 Closes #471FileDownloadSerialQueue#getWaitingTaskCount: 获取动态串行队列中正在等待启动的任务个数。Refs #3452017-02-03
FileDownloadHttpException): 修复由于在建立连接后无法取到请求头以至于遇到FileDownloadHttpException时发生IllegalStateException的问题。 Closes #4582017-01-11
FileDownloader#init中的逻辑, 使其更加的轻量(仅仅做了赋值context与maker的操作)FileDownloadService所在进程初始化FileDownloader时出现Crash的问题。 Closes #420FileDownloadHttpException类型Crash时,由于字符串的formatter无法匹配导致Crash的问题 Closes #4382016-12-18
如果你依然需要配置
timeout、proxy,请不用担心,我已经对默认的网络连接组件实现了这几个接口: DemoApplication,如果有需要可以看看。
FileDownloadQueueSet#reuseAndStart: 添加 '复用并启动'接口,主要用于在启动队列任务之前,先对任务队列中的所有任务进行尽可能的复用。 Ref #383FileDownloadConnection: 支持定制化网络连接组件,不再默认依赖okhttp。 Closes #1582016-10-31
FileDownloadSerialQueue: 便于动态管理串行执行的队列。 Closes #345.FileDownloadListener类中的callback方法, 并且新增FileDownloadListener#isInvalid方法,用于告知FileDownloader该监听器是否已经无效,不再接收任何消息。FileDownloader#clearAllTaskData: 清空filedownloader数据库中的所有数据。 Closes #361.FileDownloadListener#blackCompleted): 确保blockCompleted回调可以接收任何的Exception。 Closes #369.Logcat中可以收到原因,还能收到提示。BaseDownloadTask#pause之后短时间内调用BaseDownloadTask#reuse方法,可能会抛出异常的问题。 Closes #329.2016-10-15
FileDownloadListener时,也不能收到该任务FileDownloadMonitor.IMonitor#onTaskOver的回调的问题。 Closes #348.2016-10-09
FileDownloadListener时,也不能收到该任务FileDownloadMonitor.IMonitor#onTaskOver的回调的问题。 Closes #348.</s> 十分的抱歉这个问题在1.2.1版本中依然存在,最终在1.2.2中验证修复。2016-10-04
FileDownloader#insureServiceBind(): 便于阻塞当前线程,并且启动下载服务,服务启动之后再执行需要服务的请求。 Refs #324.FileDownloader#insureServiceBindAsync(): 便于启动下载服务,并且在服务启动之后,执行需要下载服务的请求。 Refs #324.FileDownloader#bindService(runnable:Runnable): 便于启动下载服务,并且在服务启动之后,执行 runnable。 Refs #324.FileDownloader#init(Context,InitCustomMaker): 便于初始化下载引擎的时候可以传入更多的定制化组件。 Refs #157.InitCustomMaker#database): 支持定制化数据库组件(FileDownloadDatabase),并且实现默认的数据库组件: DefaultDatabaseImpl。 Closes #157.InitCustomMaker#outputStreamCreator): 支持定制化输出流组件(FileDownloadOutputStream),并且实现默认的输出流组件: FileDownloadRandomAccessFile,与一些可替代的组件: FileDownloadBufferedOutputStream、FileDownloadOkio。Closes #301.2016-09-29
filedownloader.properties中配置file.non-pre-allocation: 是否不需要在开始下载的时候,预申请整个文件的大小(content-length), 默认值是false。Closes #313 .ThreadPoolExecutor#getActiveCount()是一个大概的值,导致在其反回的不是正确值时,thread-pool库中存在StackOverflowErrorCrash的问题。Closes #321 .minSdkVersion : 8->9。 Refs #321 .2016-09-13
BaseDownloadTask#setWifiRequired: 设置任务是否只允许在Wifi网络环境下进行下载。 默认值 false。 Closes #281 .FileDownloadExecutors) 并且所有线程池中的线程将会在闲置五秒后自动结束。 Refs #303 .FileDownloadListener#blockComplete抛出时,将会被catch并且回调到FileDownloadListener#error中而非回调FileDownloadListener#completed。 Closes #305 .2016-09-06
IllegalStateException的Bug。 Closes #307 .2016-09-05
如果你之前有使用现在已经被申明弃用的方法
BaseDownloadTask#ready(), 只需要简单的将它迁移为:BaseDownloadTask#asInQueueTask():InQueueTask并且调用InQueueTask#enqueue()。
BaseDownloadTask#asInQueueTask():InQueueTask并申明弃用BaseDownloadTask#ready(): 申明当前任务是队列任务,并且可以通过InQueueTask#enqueue()将当前任务放入全局队列以便于启动队列任务的时候,能被队列收编执行。InQueueTask#enqueue()中的操作与BaseDownloadTask#ready()相同, 我们通过这个方式封装ready()是为了让你更加清晰的了解: 只有当前任务是队列任务,才需要调用该方法;如果当前任务不是队列任务,而却调用了这个方法,你将会收到一个异常(具体异常的原因可以移步到DownloadTask#start报的异常信息进行了解)。listener对象的多个孤立任务与队列任务在不同的线程中同时被启动时(后),有可能会遇到IllegalStateException异常的问题。 Closes #282 .2016-08-21
BaseDownloadTask#cancel: 这个方法是为了说明为什么pause的操作也可以达到cancel的作用。isDownloaderProcess的结果,防止多次判断。2016-08-16
block-completed-thread-pool中的核心线程数: 5->2,减少资源的浪费。SQLiteFullException的错误,就捕获相关错误并回调回 FileDownloadListener#error 。 Closes #243FileDownloadListener#completed时,获取的targetFilePath可能为null的问题。 Closes #2372016-07-31
FileDownloader#clear: 用于强制根据任务ID清理其在filedownloader中的数据。Closes #218FileDownloader#start(FileDownloader, boolean) 添加返回值: 是否成功启动任务下载。Closes #215FileDownloader#pause 暂停任务时,不再仅仅是暂停一个任务,而是暂停掉所有ID为指定ID的运行中的任务。ActivityManager获取到运行中进程信息为空时发生CRASH。Closes #210onDestroy后,还接收到snapshot-message时发生CRASH的情况。 Closes #213FileDownloadListener的队列。Closes #233BaseDownloadTask#reuse。Closes #2293.3.1升到3.4.1。2016-07-10
FileDownloadUtils#getTempPath: 获取用于存储还未下载完成文件的临时存储路径: filename.temp。 Refs #172.FileDownloadUtils#isFilenameConverted(context:Context): 判断是否所有数据库中下载中的任务的文件名都已经从filename(在旧架构中)转为filename.temp。FileDownloader#getStatusIgnoreCompleted(id:int): 获取不包含已完成状态的下载状态(如果任务已经下载完成,将收到INVALID)。FileDownloader#getStatus(id:int, path:String): 获取下载状态。FileDownloader#getStatus(url:String, path:String): 获取下载状态FileDownloadUtils#generateId(url:String, path:String, pathAsDirectory:boolean): 生成可以被FileDownloader识别的Download Id。BaseDownloadTask#setPath(path:String, pathAsDirectory:boolean): 如果pathAsDirectory是true,path就是存储下载文件的文件目录(而不是路径),此时默认情况下文件名filename将会默认从response#header中的contentDisposition中获得。BaseDownloadTask#isPathAsDirectory: 判断BaseDownloadTask#getPath()返回的路径是文件存储目录(directory),还是文件存储路径(directory/filename)。BaseDownloadTask#getTargetFilePath: 获取目标文件的存储路径。FileDownloadQueueSet#setDirectory: 设置队列中所有任务文件存储的目录。path作为目录来存储文件,在这个情况下,文件名默认将从response#header中的contentDisposition中获得。 Refs #200.filename.temp)。 Refs #172.INVALID或progress优先接收completed消息, 以此确保connected状态的任务能够留下来接收progress状态的消息。 Refs #123pending并且已经下载的字节数大于0的Model,因为这些Model可以用于恢复断点续传。 Closes #176.2016-06-12
BaseDownloadTask#setCallbackProgressMinInterval: 用于设置每个'progress'方法回调的间隔。 Closes #167 .FileDownloader#setMaxNetworkThreadCount: 用于设置最大同时下载的数目(最大同时运行的网络线程)。 Closes #168.FileDownloader#init(Context,OkHttpClientCustomMaker,int): 在下载服务初始化的时候接受设置最大同时下载数目(最大同时运行的网络线程)。 Closes #168.SparseArray代替HashMap用于索引所有的FileDownloadModel。BaseDownloadTask#setForceReDownload(true)并且任务已经下载完成会促发'warn'的回调,却没有进行强制重新下载的Bug。SocketTimeOutException的Class类型,不再关心Throwable的message是否为空。3.2.0升到3.3.1。2016-05-19
2016-05-13
为什么FileDownload服务可以运行在UI进程? 参考 filedownloader.properties.
2016-05-10
BaseDownloadTask#isUsing():boolean: 用于判断当前的Task对象是否在引擎中启动过. Closes #137 。2016-05-02
BaseDownloadTask#getId():int: 弃用(没有删除该接口) getDownloadId(), 建议使用 getId() 代替 。FileDownloadListener的体系,新的体系就如同,派件员与快递驿站的关系,每次都会对事件进行快照,打包为一个消息快件,派发到驿站,转包给 FileDownloadListener。2016-04-22
FileDownloader#setTaskCompleted(taskAtomList:List<FileDownloadTaskAtom>): 用于告诉FileDownloader引擎,指定的一系列的任务都已经通过其他方式(非FileDownloader)下载完成。bindService 直接抛异常,防止用户在使用过程中,错误的在下载进程绑定服务,而没有暴露这个根本问题,引发其他一系列的异常。Closes #119。2016-04-20
filedownloader.properties ,改为到 模块的 assets 目录下, 如 /demo/src/main/assets/filedownloader.properties。filedownloader.properties 中的参数不起作用的bug。 Closes #117.2016-04-19
FileDownloader#setTaskCompleted: 用于告诉FileDownloader引擎,以指定Url与Path的任务已经通过其他方式(非FileDownloader)下载完成。download.max-network-thread-count 在 filedownloader.properties: 同时下载的最大网络线程数,默认值是3。 Closes #116.2016-04-18
BaseDownloadTask#getSpeed 以及 BaseDownloadTask#setMinIntervalUpdateSpeed: 获取任务的下载速度, 下载过程中为实时速度,下载结束状态为平均速度。 Closes #95 。FileDownloader#startForeground 以及 FileDownloader#stopForeground 用于支持 前台模式([Service#startForeground](http://developer.android.com/intl/zh-cn/reference/android/app/Service.html#startForeground(int, android.app.Notification))),保证用户从最近应用列表移除应用以后下载服务被杀。 Closes #110 。download.min-progress-step 以及 download.min-progress-time: 最小缓冲大小以及最小缓冲时间,用于判定是否是时候将缓冲区中进度同步到数据库,以及是否是时候要确保下缓存区的数据都已经写文件。这两个值越小,更新会越频繁,下载速度会越慢,但是应对进程被无法预料的情况杀死时会更加安全。默认值是与 com.android.providers.downloads.Constants中的一致 65536(最小缓冲大小) 以及 2000(最小缓冲时间)。process.non-separate 在 filedownloader.properties 中 : FileDownloadService 默认是运行在独立进程 :filedownloader 上的, 如果你想要FileDownloadService共享并运行在主进程上,以减少不必要的消耗(如IPC的I/O,维护进程的CPU的消耗等), 添加将该配置参数值设置为 true。 Closes #106 。2016-04-11
FileDownloadOutOfSpaceException, 当将要下载的文件大小大于剩余磁盘大小时,会抛出这个异常。FileDownloadListener 新增 started 回调方法: 在结束 pending 开始运行当前任务的线程时,回调该方法。FileDownloadMonitor.IMonitor 新增 onTaskStarted 回调方法,用于监控在结束 pending 开始运行当前任务的线程时,回调该方法。这样就可以在监控中通过 onTaskBegin到onTaskStarted计算出pending的时间,在onTaskStarted到onTaskOver计算出真正消耗在下载的时间(Connection、Fetching)。FinishListener 的 over 方法提供所指向的Task,为了有些时候我们为多个任务添加相同的 FinishListener 时,需要这个参数来判断当前是哪个任务的回调。 Closes #69 。start 方法,直接抛异常;并且为已经结束的Task对象提供 BaseDownloadTask#reuse 进行复用。 Closes #91 。progress 方法的回调中包含了对完成( sofarBytes==totalBytes )的回调,导致回调间隔不达预期的bug。warn 回调带回 total-bytes,为了覆盖在 主进程被杀,下载进程存在的情况下,主进程重新重启并启动相同任务,total-bytes为0的bug。 Closes #90 。retry 时,retry 只被回调一次,其他的次数的 retry 都不被回调的bug。 Refs: #91 。2016-04-06
FileDownloadHttpException 与 FileDownloadGiveUpRetryException, 优化异常回调处理机制. Closes #67 。FileDownloader 传入参数由原来需要 Application 改为 需要 Context( FileDownloader#init(Context) ), 优化接口,并且便于单元测试。 Closes #54 。Range 头部参数就可以支持断点续传。 Close #35 , #66 。FileDownloadLog.NEED_LOG 为 true 时,并且事件无效的情况下,EventPool 出现 IllegalFormatConversionException 异常的问题。 Closes #30 。IFileDownloadIPCService 出现异常。Closes #38 。internal-string 作为同步的对象,而非直接用 String对象。3.1.2升到3.2.0。2016-02-15
filedownloader.properties-http.lenient: 添加http.lenient用于配置下载引擎中是否需要忽略一些http规范性的错误(如: 忽略 can't know the size of the download file, and its Transfer-Encoding is not Chunked), 默认值false。FileDownloadNotificationHelper: 用于支持在通知栏中的通知对下载引擎中任务下载状态同步的快速集成。FileDownloader#init(Application,OkHttpClientCustomMaker): 用于为下载引擎提供定制的OkHttpClient。FileDownloadTask.NEED_RESTART_LIST)不为空并且下载服务断开时出现Concurrent Modification Exception的异常。2016-01-23
引擎默认会打开 避免掉帧的处理(使得一次回调(FileDownloadListener)不至于太频繁导致手机显示掉帧), 如果你希望关闭这个功能(关闭以后,所有回调会与之前版本一样,所有的回调会立马抛一个消息ui线程(Handler)):
FileDownloader.getImpl().disableAvoidDropFrame().
FileDownloadMonitor: 现在你可以通过这个来添加一个全局的监听器,方便调试或打点FileDownloader#enableAvoidDropFrame(void): 开启 避免掉帧, 原理最多10ms抛一个消息到ui线程,每次在ui线程每次处理5个回调(FileDownloadListener), 默认: 开启。FileDownloader#disableAvoidDropFrame(void): 关闭 避免掉帧,会和之前的版本一样,每个回调(FileDownloadListener)都抛一个消息到ui线程,如果频率非常高(如高并发的文件检测)可以导致ui线程被DDOS。FileDownloader#isEnabledAvoidDropFrame(void): 是否是 开启了避免掉帧,目前如果没有设置默认是开启的。FileDownloader#setGlobalPost2UIInterval(intervalMillisecond:int): 设置最多intervalMillisecond毫秒抛一个消息到ui线程,是 避免掉帧的具体设置。默认: 10ms,如果设置为小于0的数值,会 关闭 避免掉帧。FileDownloader#setGlobalHandleSubPackageSize(packageSize:int): 设置每次在ui线程每次处理packageSize个回调,如果已经关闭了 避免掉帧,那么这个值将没有任何意义,默认: 5个。BaseDownloadTask#setSyncCallback(syncCallback:boolean): 是否同步回调该task中的所有的回调(FileDownloadListener), 如果设为true, 该task的所有回调会直接在下载线程直接回调,不会抛到ui线程, 默认: false。BaseDownloadTask#isSyncCallback(void):boolean: 该task是否设置了所有回调(FileDownloadListener)同步调用(直接在下载线程直接调用,而非抛到ui线程)。FileDownloadUtils#setDefaultSaveRootPath: 设置全局默认的存储路径(Root Path),在task没有指定对应的存储路径的时候,会存储在该目录下。FileDownloadQueueSet: 用于更方便的指定几个task为一个队列,进行并行/串行下载,并且可以很方便的对整个队列中的所有任务进行统一设置。FileDownloadMonitor),更方便与调试或打点。FileDownloadListener中的回调将会直接调用,而不再过一层EventPool。EventPool中的listener存储器无限制的bug.2016-01-17
BaseDownloadTask#setTag(key:int, tag:Object): 用于存储任意的变量方便回调中使用,以key作为索引。BaseDownloadTask#getTag(key:int): 根据key获取存储在task中的变量。BaseDownloadTask#addHeader(name:String, value:String): 添加自定义的请求头参数,需要注意的是内部为了断点续传,在判断断点续传有效时会自动添加上(If-Match与Range参数),请勿重复添加导致400或其他错误。BaseDownloadTask#addHeader(line:String): 添加自定义的请求头参数,需要注意的是内部为了断点续传,在判断断点续传有效时会自动添加上(If-Match与Range参数),请勿重复添加导致400或其他错误。BaseDownloadTask#removeAllHeaders(name:String): 删除由自定义添加上去请求参数为{name}的所有键对。Warn、Error、Assert级别的log以便于用户在未打开日志的情况下也可以定位到基本的组件异常。2.7.1升到3.0.1。2016-01-13
FileDownloader#unBindServiceIfIdle(void): 如果目前下载进程没有任务正在执行,则关停下载进程FileDownloader#getStatus(downloadId): 获取下载Id为downloadId的状态(可参考任务管理demo)FileDownloader#isServiceConnected(void): 是否已经启动并且连接上下载进程(可参考任务管理demo):filedownloader进程启动时,对数据库中的数据进行第一级别维护。callbackProgressTimes字段。FileDownloader#pauseAll无法暂停已经在下载进程启动的任务的bug。FileDownloader#unBinderService,没有释放连接相关资源的bug。2016-01-04
FileDownloadLargeFileListener作为监听器,使用对应的getLargeFileSoFarBytes()与getLargeFileTotalBytes()接口2.7.0升到2.7.12015-12-27
2015-12-25
2015-12-24
int改为byte,该参数会频繁的在IPC时被拷贝2015-12-23
2015-12-22