Skip to content

Releases: lingochamp/FileDownloader

v0.2.5

19 Apr 05:59
Compare
Choose a tag to compare

New Interfaces

  • Add FileDownloader#setTaskCompleted: Used to telling the FileDownloader Engine that the task with the Url and the path has already completed downloading by other ways(not by FileDownloader Engine).
  • Support the configuration download.max-network-thread-count in filedownloader.properties: The maximum network thread count for downloading simultaneously, default is 3. Closes #116.

v0.2.4

18 Apr 06:53
Compare
Choose a tag to compare

中文

New Interfaces

  • Add BaseDownloadTask#getSpeed and BaseDownloadTask#setMinIntervalUpdateSpeed: Get the download speed for a task. If it is in processing, the speed would be real-time speed; If finished, the speed would be average speed. Closes #95
  • Add the FileDownloader#startForeground and FileDownloader#stopForeground for supporting the Foreground mode(Service#startForeground); For ensure the FileDownloadService would keep alive when user removed the App from the recent apps. Closes #110 .
  • Support configurations download.min-progress-step and download.min-progress-time: The min buffered so far bytes and millisecond, used for adjudging whether is time to sync the download so far bytes to database and make sure sync the downloaded buffers to the local file. More small more frequent, then download more slowly, but will safer in the scene of the process is killed unexpectedly. Default 65536(MinProgressStep) and 2000(MinProgressTime), which follow the value in com.android.providers.downloads.Constants.
  • Support the configuration process.non-separate in filedownloader.properties: The FileDownloadService runs in the separate process ':filedownloader' as default, if you want to run the FileDownloadService in the main process, set this configuration as true. Closes #106 .

Enhancement

  • Improve Performance: Download more quickly, Optimize the strategy about sync the buffered datum to database and local file when processing. Closes #112 .

Fix

  • Fix: Can't restart the task which in paused but is still settling in the download-pool. Closes #111

v0.2.3

11 Apr 04:32
Compare
Choose a tag to compare

中文

New Interfaces

  • Add FileDownloadOutOfSpaceException, Throw this exception, when the file will be downloaded is too large to store.
  • Add new call-back method in FileDownloadListener: started which will be invoked when finish pending, and start the download runnable.
  • Add new call-back method in FileDownloadMonitor.IMonitor: onTaskStarted which will be invoked when finish pending, and start the download runnable.

Enhancement

  • Improve Practicability: Provide the current task to the method over in FinishListener, for recognizing target task in case of one-FinishListener for more than one task. Closes #69 .
  • Improve Robust: Throw the exception directly when invoke BaseDownloadTask#start for a running-task object, add provide 'reuse' method to reuse a used and already finished task object. Closes #91 .
  • Improve Performance: Intercept the enqueue operate for the otiose event which is no listener for handling it.

Fix

  • Fix: In handful cases the task-call-back flow not follow the expect.
  • Fix: progress call-back included the ending frame ( sofarBytes == totalBytes ).
  • Fix: Carry back the total bytes in the status of warn, for covering the case of UI-process had killed but has restarted App with restarting the task and download-process is alive still, the total bytes is 0 in UI-process. Closes #90 .
  • Fix: Can't call-back 'retry' in expect, the case of the call-back method 'retry' one-by-one. Refs: #91 .
  • Fix: The wrong sofar bytes will cover the right one, when occur error in no-network and has chance to retry. Closes #92 .
  • Fix: Handle the case of the downloading is finished during the 'check-reuse' to 'check-downloading' in filedownloader-process.
  • Fix: The serial-queue converts to The parallel-queue in restoring from filedownloader-process has killed and restarting.

v0.2.2

06 Apr 03:31
Compare
Choose a tag to compare

Fixed

  • Fixed: fix the incorrect free space size was calculated in device lesson than JELLY_BEAN_MR2(Android 4.3)

v0.2.1

05 Apr 12:19
Compare
Choose a tag to compare

中文

New Interfaces

  • Add FileDownloadHttpException and FileDownloadGiveUpRetryException, and optimize the mechanism of exception. Closes #67 .
  • Init the FileDownloader use Context instead of Application ( FileDownloader#init(Context) ) , for more make sense and unit-test. Closes #54 .

Enhancement

  • Improve Robust: Check whether free space is enough, and throw IOException directly when not enough; And pre-allocate need-available-space before fetching datum when the free space more than need-available-space. Closes #46 .
  • Improve Practicability: Support resume from breakpoint without ETag. Just need the server support the request-header param 'Range'. Close #35 , #66 .

Fix

  • Fix: The IllegalFormatConversionException on EventPool when publishing the event which does not in effect and FileDownloadLog.NEED_LOG is true. Closes #30 .
  • Fix: The non-fatal-crash in IFileDownloadIPCService.java , when lost connection from filedownloader process. because the IBinder's hosting process(filedownloader process) has been killed/cancelled. Closes #38 .
  • Fix: The leak of response-body: 'WARNING: A connection to https://... was leaked. Did you forget to close a response body?' Closes #68 .
  • Fix: Using the internal-string as synchronized lock-object instead of string-original.
  • Fix: The number of the Ing-call-back is not correct in some cases.

Others

  • Upgrade dependency okhttp from 3.1.2 to 3.2.0.

v0.2.0

15 Feb 02:56
Compare
Choose a tag to compare

中文

New Interfaces

  • filedownloader.properties-http.lenient: Add 'filedownloader.properties' for some special global configs, and add 'http.lenient' keyword to 'filedownloader.properties' to handle the case of want to ignore HTTP response header from download file server isn't legal.
  • FileDownloadNotificationHelper: Refashioning NotificationHelper, let handle notifications with FileDownloader more make sense. #25
  • FileDownloader#init(Application,OkHttpClientCustomMaker): Support customize OkHttpClient which will be used for downloading files.

Fix

  • Fix: Occur 'Concurrent Modification Exception' when Downloader service is unbound or lost connection to service and NeedRestart list not empty. #23
  • Fix: The case of re-connect from lost connection to service but all auto restart tasks' call-back do not effect.
  • Fix: In some cases of high concurrency, the Pause on some tasks is no effect.

v0.1.9

23 Jan 05:21
Compare
Choose a tag to compare

中文


FileDownloader is enable Avoid Missing Screen Frames as default, if you want to disable it, please invoke FileDownloader.getImpl().disableAvoidDropFrame().

New Interfaces

We default open Avoid Missing Screen Frames, if you want to disable it(will post to ui thread for each FileDownloadListener event achieved as pre version), please invoke: FileDownloader.getImpl().disableAvoidDropFrame().

  • FileDownloadMonitor: You can add the global monitor for Statistic/Debugging now.
  • FileDownloader#enableAvoidDropFrame(void): Avoid missing screen frames, but this leads to all callbacks of FileDownloadListener do not be invoked at once when it has already achieved.
  • FileDownloader#disableAvoidDropFrame(void): Disable avoid missing screen frames, let all callbacks of FileDownloadListener be invoked at once when it achieve.
  • FileDownloader#isEnabledAvoidDropFrame(void): Has already enabled Avoid Missing Screen Frames. Default: true
  • FileDownloader#setGlobalPost2UIInterval(intervalMillisecond:int): For Avoid Missing Screen Frames. Each intervalMillisecond post 1 message to ui thread at most. if the value is less than 0, each callback will always post a message to ui thread immediately, may will cause missing screen frames and produce great pressure on the ui thread Looper. Default: 10ms.
  • FileDownloader#setGlobalHandleSubPackageSize(packageSize:int): For Avoid Missing Screen Frames. {packageSize}: The number of FileDownloadListener's callback contained in each message. value completely dependent on the intervalMillisecond of setGlobalPost2UIInterval, describe will handle up to {packageSize} callbacks on the each message posted to ui thread. Default: 5.
  • BaseDownloadTask#setSyncCallback(syncCallback:boolean): if true will invoke callbacks of FileDownloadListener directly on the download thread(do not post the message to the ui thread), default false.
  • BaseDownloadTask#isSyncCallback(void):boolean: Whether sync invoke callbacks of FileDownloadListener directly on the download thread.
  • FileDownloadUtils#setDefaultSaveRootPath: The path is used as Root Path in the case of task without setting path in the entire Download Engine.
  • FileDownloadQueueSet: In order to be more convenient to bind multiple tasks to a queue, and to the overall set.

Enhancement

  • Improve Debugging: Provide the FileDownloadMonitor to monitor entire Download Engine.
  • Improve Performance: Optimize EventPool lock & do not handle listener priority any more(no use internal).
  • Improve Performance: Call FileDownloadListener methods do not through EventPool, instead, invoke directly.

Fix

  • Fix: EventPool listener unlimited increased bug.

v0.1.5

17 Jan 16:50
Compare
Choose a tag to compare

中文

New Interfaces

  • BaseDownloadTask#setTag(key:int, tag:Object): Set a tag associated with this task. If the key already existed, the old tag will be replaced.
  • BaseDownloadTask#getTag(key:int): Get the object stored in the task as a tag, or null if not set.
  • BaseDownloadTask#addHeader(name:String, values:String): Add custom request header to the task. Attention: We have already handled ETag, and will add If-Match & Range value if it works.
  • BaseDownloadTask#addHeader(line:String): Add custom request header to the task. Attention: We have already handled ETag, and will add If-Match & Range value if it works.
  • BaseDownloadTask#removeAllHeaders(name:String): Remove all custom request header bind with the {name}.

Enhancement

  • Improve Performance: Reduce the consumption of the generated log.
  • Improve Debugging: To filter all the log level, reduce the high level of log output, and by default, will output WarnErrorAssert level of log in order to debugging in the case of the value of FileDownloadLog.NEED_LOG is false(default).

Fix

  • Fix can't resume from the break point naturally in case of the download status of the task is Error.
  • Fix the size of the queue may not match the number of actual active tasks in case of high concurrency. This bug may would caused some callbacks to be consumed by the old tasks.

v0.1.4

17 Jan 15:04
Compare
Choose a tag to compare

New Interfaces

  • FileDownloader#unBindServiceIfIdle(void): If there is no active task in the :filedownloader progress currently , then unbind & stop :filedownloader process
  • FileDownloader#getStatus(downloadId): Get download status by the downloadId(ps: Please refer to Tasks Manager demo
  • FileDownloader#isServiceConnected(void): Whether started and connected to the :filedownloader progress(ps: Please refer to Tasks Manager demo)

Enhancement

  • Supported Chunked transfer encoding data download(Recommend to glance at demo on Single Task Test).
  • Improve Performance: Reduce IPC.
  • Improve Performance: Reduce lock.
  • Improve Performance: Delete invalid datas in db with the :filedownloader progress start.
  • Improve Performance: Ignore the callbackProgressTimes column in db.

Fix

  • Fix FileDownloader#pauseAll not effect in case of low memory and ui progress is Background Progress situation and the :filedownloader progress(Service Progress) alive and still have running tasks in the filedownloader progress but ui progress has died and relived.
  • Fix not release connect resources when invoke FileDownloader#unBinderService manually.
  • Handle case of ui progress be killed by sys and download progress not be killed, and ui progress relives and reexecutes same tasks queue.

v0.1.3

17 Jan 15:05
Compare
Choose a tag to compare
  • Enhancement: no longer subject to the upper bound of 1.99G, add FileDownloadLargeFileListener, getLargeFileSoFarBytes(),getLargeFileTotalBytes().
  • Performance optimization: some ipc transaction just need one-way call(async), not block(sync).
  • Upgrade dependency okhttp from 2.7.0 to 2.7.1.