FileDownloader 到 OkDownload 無縫切換

FileDownloader 是 Android 平臺下一個優秀的下載引擎,它主要有如下優勢:git

  • 簡單易用
  • 支持獨立進程
  • 單任務分塊下載
  • 高併發支持
  • 斷點續傳支持

這些優勢使得 FileDownloader 很是受歡迎。然而,FileDownloader 自己不夠輕量,且單測覆蓋率十分之低。而且,前面說的獨立進程的支持,隨着 Android 8 系統開始對後臺服務的限制愈來愈嚴格,從一個優勢慢慢變成了缺點。爲了兼容 Android 8 及以後的系統,在後臺開啓下載任務時,FileDownloadService 必須成爲一個前臺 Service ,用戶會看到一個表示下載正在進行的通知。FileDownload 1.7.6 版本開始,我也提供了通知的定製化組件,具體能夠參考這裏。但是,在一個公共 library 去作系統兼容方便的事情,會顯得十分吃力,每每會作不少很糟糕的妥協。最可怕的事,每每有些問題在 library 的層面是沒法解決的,好比 Issue 1209github

爲了以後開發新的功能以及維護工做,咱們開發了新的下載引擎 OkDownload 。它擁有 FileDownloader 的全部優勢同時還具備不少 FileDownloader 不具有的優勢。具體不在這裏贅述,你們能夠參考 Wikisql

接下來着重說明怎麼進行無縫切換。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 。高併發

相關文章
相關標籤/搜索