はじめに
PJでダウンロードを管理するライブラリの検討、サンプル実装をすることになりました。
こちらはその時の覚書です。
要件
- 複数のダウンロードリクエストを管理できる (ダウンロード状態を管理できる、 開始・実行中・完了・エラーなど)
- ダウンロードするファイルはユーザーが通常使えない場所が好ましい
- 一定以上の使用実績や情報がある
検討1. DownloadManager
Google のガイドにある通り、はじめはDownloadManagerで開発を進めていました。
https://developer.android.com/guide/background
が、DownloadManagerは今回のPJの要件では使えない致命的な特徴がありました...
stack over flow
の記事にもある通り、DownloadMangaerでは一時的であっても、
外部ストレージにファイルを保存する必要があります。
ここが引っかかって、今回は不採用となりました。
(もちろん、BroadcastReceiver使えばいいんですが、外部ストレージの削除を保証する仕組みができるか怪しいのと一部端末でダウンロードができない事象が発生したため。元々、メーカーごとに外部ストレージの構造が異なるAndroidでは動かない端末なども出てきそうなので...)
検討2. Fetch
自分が検討したというよりも、推薦・サンプル実装を他のメンバーが進めていたものになります。
https://github.com/tonyofrancis/Fetch
Githubで探してみても、AndroidのDownloadManagerって驚くほど少なくて、
これはほぼ唯一と言っていいくらい作り込みや宣伝がきちんとできていたものでした。
使ってみて、内部ストレージへの直接保存もできているのでひとまずはこちらを使ってます。
ちょっと作りかけですが、サンプルも置いておきます...
https://github.com/shinya-takano/FetchSample
まとめ
そもそも、大容量ファイルでなければDownloadManagerやFetchなどの選択肢じゃなくていいのかもと思いました。
(以前のPJでは、普通にOkHttpを使用していたので...とはいえ、今回は多数のダウンロードリクエストを管理しないといけないためダウンロードライブラリが必要でしたが...)
皆様はどうやっているのでしょうか...
その他
ログ送信のような機能でWorkManagerも使ってみてます。
案外、WorkMangagerでも今回は足りた気がしていて、
短時間のダウンロードであればこちらにスイッチした方が使いやすいかなと若干思いました。