LoginSignup
13
8

More than 5 years have passed since last update.

Android 7.0からDownloadProviderがJobSchedulerを使うようにしれっと変わっていた話

Posted at

多くは語らないけど、DownloadProviderのアーキテクチャは単純明快で、いろいろ参考になることが多い。
そんなDownloadProviderが、Android 7.0 Nougatからしれっと実装が変わっていたので、かるくソースコード解読をしたメモです。

※ちなみにこの記事は、DownloadProviderのもともとの作りを知ってる前提で書いてます。しらないかたはまずはAndroid 6.0までのソースを読んで下さい。
 
 

対象のコミット

消えたDownloadService

DBに書かれたイベント契機で裏でいろいろゴニョゴニョ動いていたDownloadServiceがなくなりました。
代わりに、JobScheduler発動時に動くDownloadJobServiceというのが追加されています。
「ネットワーク状態が変わったら・・・」とか、「リトライ回数が・・・」みたいなロジックは全部JobSchedulerに委ねられることになりました。

DownloadProvider経由でdownloads.dbにinsert/update/deleteされるときに、KeepAlive的な処理がされていたところは、JobSchedulerへのスケジュール処理になっています。

image

DownloadThreadが純粋にThreadに

もともとは、DownloadService上にあったスレッドプール上で動くRunnableでした。

Android-6.0
public class DownloadThread implements Runnable {

Android 7.0では、土台がJobScheduler上で動くサービスになったので、もはやスレッドプールという概念はありません。

Android-7.0
public class DownloadThread extends Thread {

DownloadJobServiceとDownloadThreadが1対1に対応するようになりました。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8