android5.0下载管理器研究(一)

原创
2015/01/27 00:46
阅读数 160

    谷歌的android5.0在14年10月15日发布,由于工作原因,个人比较关注下载方面的变动。初步看了下5.0的源码,与4.0相比,改变的地方还是比较多的,最近便准备研究下5.0下载管理器的方方面面。

    下载管理器说白了就是一个数据库,上层应用可以使用插入数据库的方式直接实现下载,并不需要关心下载的细节。只需要通过数据库告诉下载管理器接收消息的类,就可以在下载有结果的时候获得对应的广播。虽然只是一个数据库,但是下载管理器由于要考虑到方方面面的需求,所以代码也不是太少,结构如下:

        


    Constants:常量类,用于存放各种静态参数。

    DownloadDrmHelper:Digital Rights Management数字加密的辅助类。

    DownloadIdleService:此service用于下载文件的校验恢复,需要配合5.0新增的JobScheduler使用。

    DownloadInfo:每一行下载记录对应的缓存信息,下载管理器中大多数时候是操作的info缓存,而非直接操作数据库。

    DownloadNotifier:处理下载管理器中notification相关的所有通知事项。

    DownloadProvider:创建并操作数据库,启动下载主service。是下载管理器与外部app直接交互的重要窗口(另外一部分是下载过程中发出的intent)。

    DownloadReceiver:各种系统广播的接收器。

    DownloadScanner:扫描下载完成的文件时用到。

    DownloadService:下载管理器的主service,可以被同时多次start,只要有下载,就不会停下来。

    DownloadStorageProvider:与DownloadManager有关的一个类,使用情况不明,待研究~

    DownloadThread:用来下载文件的线程。

    Helpers:下载管理器的一些辅助类。

    OpenHelper:同上。

    RealSystemFacade/SystemFacade:参见度娘“facade设计模式”搜索结果。

    SizeLimitActivity:要下载的文件大小超量以及下载到一半切换到移动网络时用到。下载管理器中唯一的一个activity。

    StopRequestException:用来停掉DownloadThread的专用exception。

    StorageUtils:DownloadManager有关的一个类,使用情况不明,待研究~

    另外,系统中还有两个类与下载管理器息息相关:android.app.DownloadManager以及android.provider.Downloads。

    

    下载管理器的java文件差不多也就这些了。一个典型的下载流程大致是这样的:

上层应用插入数据库

调用DownloadProvider的insert方法

启动DownloadService

启动DownloadThread

下载结束发出广播给上层应用。

    to be continue。

展开阅读全文
打赏
0
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部