前一段时间看了一下Android自带的DownloadManager的相关代码,觉得比较有意思,在此简单做一些介绍。文本在此也仅仅是简单介绍,不涉及一些细枝末节的东西,还有比如数字版权之类的。
首先DownloadManager分为两个部分,对外部暴露的接口属于框架层,位于framework/base/core/java/android/app/DownloadManager.java,编译之后就在/system/framework.jar。其实这里的仅仅是类似于接口的东西,具体的实现在厂商第三方作为DownloadProvider
,就像命名那样整个下载流程的核心就在这里的ContentProvider
,从类的命名中可以非常容易的看出调用关系。
DownloadManager
DownloadManager作为一个全局服务直接从Context
中获得,其提供了所有的和任务相关的操作接口,这里从访问下载任务说起。对于下载任务最为常用的操作还是查询和对状态的监听,第一次看到DowloadManager提供的接口时我对于没有回调接口非常奇怪,而看到的仅仅是DownloadManager#query(query:Query)
,而且返回的是一个数据库游标。进而深入进去发现所有的核心就是DownloadProvider
。