FileDownloader 是 Android 平台下一个优秀的下载引擎,它主要有如下优势:git
这些优势使得 FileDownloader 很是受欢迎。然而,FileDownloader 自己不够轻量,且单测覆盖率十分之低。而且,前面说的独立进程的支持,随着 Android 8 系统开始对后台服务的限制愈来愈严格,从一个优势慢慢变成了缺点。为了兼容 Android 8 及以后的系统,在后台开启下载任务时,FileDownloadService
必须成为一个前台 Service ,用户会看到一个表示下载正在进行的通知。FileDownload 1.7.6 版本开始,我也提供了通知的定制化组件,具体能够参考这里。但是,在一个公共 library 去作系统兼容方便的事情,会显得十分吃力,每每会作不少很糟糕的妥协。最可怕的事,每每有些问题在 library 的层面是没法解决的,好比 Issue 1209 。github
为了以后开发新的功能以及维护工做,咱们开发了新的下载引擎 OkDownload 。它拥有 FileDownloader 的全部优势同时还具备不少 FileDownloader 不具有的优势。具体不在这里赘述,你们能够参考 Wiki 。sql
接下来着重说明怎么进行无缝切换。OkDownload 是十分轻量的,为了你们已经写好的 FileDownloader 的代码依然可用,为 OkDownload 提供了一个新的子 library 叫 filedownloader 。引入该库,以前的代码不用作任何改动依然生效,新的下载使用 OkDownload 的 API 便可。数据库
dependencies {
// implementation "com.liulishuo.filedownloader:library:1.7.7"
implementation "com.liulishuo.okdownload:okdownload:1.0.7-SNAPSHOT"
implementation "com.liulishuo.okdownload:filedownloader:1.0.7-SNAPSHOT"
implementation "com.liulishuo.okdownload:sqlite:1.0.7-SNAPSHOT"
}
复制代码
所谓无缝切换的目的,上面的例子其实已经作到了,只是换了一个 library 的依赖便可。大部分状况下,应该就没有问题了。可是有些状况仍是须要向你们说明。FileDownloader 和 OkDownload 都采用数据库的方式记录任务的断点信息。可是,FileDownloader 和 OkDownload 的数据表以及对应的数据结构区别已经很是大了,在 OkDownload 里面去适配 FileDownloader 的数据库是很是繁重且收效甚微的事情。并且,在 OkDownload 里面已经不使用临时文件的方式了,因此就算费很大力把数据迁移到 OkDownload ,文件层面也无法复用以前的数据。换言之,迁移到 OkDownload 后,以前 FileDownlaoder 还未下载完成的那些任务的断点信息就没有了。事实上这也不是什么大问题,OkDownload 会从新下载这些任务,且以后的断点功能不会有任何影响。在 OkDownload 里,为 FileDownloader
提供了一个方法 discardFileDownloadDatabase
能够清除旧的 FileDownloader 的数据库。若是你在使用 FileDownloader 的时候自定义了 FileDownloadDatabase
,那么这个自定义数据库也不会再生效。数据结构
FileDownloader 还提供了 IdGenerator
的自定义,但在 OkDownload 里面已没有该组件的支持。OkDownload 中同一任务的 id 在不一样时间启动是会变化的。因此,若是你的一些逻辑依赖于对任务 id 的持久化(好比存到数据库),那么这个切换到 OkDownload 以后,该部分逻辑会有问题。在 FileDownloader 的 Demo 中,提供了一个 TasksManagerDemoActivity
样例展现如何管理多个任务。这个例子里面就有我前面说的逻辑。须要作的调整也是比较简单的,我单独提了个 Pull Request 说明在纠正对应逻辑时应该怎么作。并发
FileDownloader 中的一些方法在 OkDownload 中被 Deprecated 或者删除了,不过绝大部分应该不影响你们的实际使用。但愿你们使用 OkDownload 1.0.7-SNAPSHOT 去尝试从 FileDownloader 切换到 OkDownload ,过程当中有任何问题欢迎在 OkDownload 里面提 Issue 。高并发