多くは語らないけど、DownloadProviderのアーキテクチャは単純明快で、いろいろ参考になることが多い。
そんなDownloadProviderが、Android 7.0 Nougatからしれっと実装が変わっていたので、かるくソースコード解読をしたメモです。
※ちなみにこの記事は、DownloadProviderのもともとの作りを知ってる前提で書いてます。しらないかたはまずはAndroid 6.0までのソースを読んで下さい。
対象のコミット
消えたDownloadService
DBに書かれたイベント契機で裏でいろいろゴニョゴニョ動いていたDownloadServiceがなくなりました。
代わりに、JobScheduler発動時に動くDownloadJobServiceというのが追加されています。
「ネットワーク状態が変わったら・・・」とか、「リトライ回数が・・・」みたいなロジックは全部JobSchedulerに委ねられることになりました。
DownloadProvider経由でdownloads.dbにinsert/update/deleteされるときに、KeepAlive的な処理がされていたところは、JobSchedulerへのスケジュール処理になっています。
DownloadThreadが純粋にThreadに
もともとは、DownloadService上にあったスレッドプール上で動くRunnableでした。
public class DownloadThread implements Runnable {
Android 7.0では、土台がJobScheduler上で動くサービスになったので、もはやスレッドプールという概念はありません。
public class DownloadThread extends Thread {
DownloadJobServiceとDownloadThreadが1対1に対応するようになりました。