文档章节

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

 晃晃悠悠的天平
发布于 2015/01/27 00:46
字数 647
阅读 135
收藏 0

    谷歌的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
博文 2
码字总数 1402
作品 0
南京
私信 提问
那些年Android黑科技①:只要活着,就有希望

“黑科技什么的最喜欢了! 对,我们就是要搞事。 来呀。谁怕谁。三年血赚,死刑不亏。(๑´ڡ`๑) ” -- 来自暗世界android工程师 前言: 这个世界上手机有三大系统,苹果、 安卓、 中国安卓 ...

猴亮屏
2017/10/24
44
0
在eclipse中打开资源管理器

在平时的开发工作中,经常要在eclipse与资源管理器之间切换,如果每次都要从我的电脑中,找到对应目录,对于开发效率大大降低。不说废话,直接切入正题。 方法一: window eclipse配置 Run-...

lvsazf
2016/01/17
0
0
使用nginx搭建https服务器

丁丁的开发日记 一所懸命 使用nginx搭建https服务器 最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又...

毛爷爷夸我帅
2016/06/21
50
0
【目录】姜晔的技术空间目录

逆向工程系列 逆向工程第001篇:解锁FIFA07传奇模式 逆向工程第002篇:打造自己的仙剑奇侠 逆向工程第003篇:跨越CM4验证机制的鸿沟(上) 逆向工程第004篇:跨越CM4验证机制的鸿沟(中) 逆...

ioio_jy
2014/09/15
0
0
配置 VIM 的 Go 语言开发环境

配置 VIM 的 Go 语言开发环境 抛弃世俗之浮躁,留我钻研之刻苦2014-07-02480 阅读 go配置环境vim 本文是针对像我这样的 VIM 小白而写的,所使用的 VIM-GO 插件虽然步骤简单但不够详细,特写此...

抛弃世俗之浮躁,留我钻研之刻苦
2014/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
681
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
72
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部