DownloadManager源码

各家APP都有自己的下载工具,都不用系统的,然而貌似系统的下载各方面都要好一些,看一下,为自己写下载组件做准备。

方法

  • 下载肯定会有IPC,也肯定会有日志系统。DownloadManager使用的是ContentProvider的形式。业务调用的都是DownloadManager对于ContentProvider的封装
  • ContentProvider事实上是个非常厉害的存在,可以做任何简单的IPC调用,只要所有数据都是Uri和ContentValue能够描述即可。DownloadProvider中的insert就做了数据库、启动下载一系列操作
  • 对于不能判断完整性的输入,与其用的地方再判空,不如统一在输入的地方做合理性判断、使用默认值替换不合理或者空值
  • Android四大组件中,三个能做出单例的效果来(singleTask的Activity、Service和ContentProvider)都有内存和生命周期回调,合理使用比单例会更好
  • Download中Service只是充当了更方便调用的ContentProvider的作用,感觉上是可以被干掉的
  • 对于生命周期与组件不一定同步的功能,本例中的下载与Service,一定要有日志和恢复系统,并且先进行可重复的工作(对于某段数据的下载)再更新日志,保证使用日志能够恢复现场
  • 日志与真正工作只要有一个性能级差异就行了(文件与sqlite,sqlite与网络),不需要搞得特别复杂

技巧

  • import static,仅仅import对应类中的static方法/常量,能少打几行字
  • 监听ContentProvider中数据变化:ContentObserver
  • Handler.Callback看上去和继承Handler的功能是一样的。可能是做Command Chain用的吧,多层次的Handler
  • Future很多异常在get的时候才会抛,执行完要get一下,看看有没有异常
  • 使用Handler时,尽量用Message代替Runnable,提高性能
  • 后台长时间任务应该使用WakeLock,注意合适类型的选择。一定要在finally中释放锁
  • 靠Exception做统一处理的分支,除了不好阅读,非常好用
  • 使用Os类对文件进行各种操作,是直接调用系统的底层函数,看样子是要快一些,参考源码
  • 解决多线程问题的好方法是,使用一个单线程(Handler)做中台统一处理做分发
时间: 2024-10-12 12:04:16

DownloadManager源码的相关文章

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

Android源码AOSP之设置Settings阅读记录

Android 4.4 系统的设置源码阅读记录 ----------2014-7-3------------------ AndroidManifest.xml launch的activity是 Settings,另外有40多个activity继承于它,比如设置的一级菜单: wifi,蓝牙,声音,显示,安全,应用程序,语言和时间,关于设备等等.实际上都是这一个acitivy. 这里从安全设置看起,SecuritySettings.java 以资源文件R.xml.security_settings

DownloadProvider 源码详细分析

DownloadProvider 简介 DownloadProvider 是Android提供的DownloadManager的增强版,亮点是支持断点下载,提供了“开始下载”,“暂停下载”,“重新下载”,“删除下载”接口.源码下载地址 DownloadProvider 详细分析 DownloadProvider开始下载的是由DownloadManager 的 enqueue方法启动的,启动一个新的下载任务的时序图  开始新的下载时候会调用DownloadManager的enqueue方法,然后再

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

android-音乐播放器实现及源码下载(二)

本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲的功能 3.利用jsoup解析网页数据,从网络获取歌曲列表,同时实现歌曲和歌词下载到手机本地的功能. 4.通知栏提醒,实现仿QQ音乐播放器的通知栏功能. 涉及的技术有: 1.jsoup解析网络网页,从而获取需要的数据 2.android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现

libnetwork 源码浅析

[编者的话]从docker 1.6开始关注docker网络这块,从原来的铁板一块,到后来的libnetwork拆分,到现在的remote driver,docker 一直在改进.功能缺失,实用性不足,特别是不能提供支持生产环境的解决方案,一直为大家所诟病.Overlay, Macvlan, IPVlan驱动的出现,会对这种局面有一定帮助.在我看来,引入专业的网络供应商及解决方案才是更好的出路.在软件定义网络方面,OVS是实际的标准,它可以帮助docker运营者对网络基础设施提供更深入,细粒度的掌

SDWebImage异步下载和缓存的源码剖析

前言: 在移动app开发过程中,考虑到手机流量.网速以及内存等因素,当我们的app需要频繁的访问网络时,对网络优化这块的要求就显得尤为重要. 比如某个app需要经常重复显示很多张网络图片的时候,如果在每次需要显示同一张网络图片,都要访问网络进行下载操作,那就显得很不合理了. 因为那样会相当耗时,且耗流量.这就需要对已下载好的网络图片进行缓存操作. 我目前开发的一个项目属于展示类app,一个需要频繁处理网络图片的应用,涉及复杂的异步下载和异步缓存等处理. 在使用SDWebImage类库进行网络图片

小说分销系统,微信小说分销,类掌中云小说系统,类818tu系统源码

[演示站参数][][][][][][][][][][][] [后 台 地 址]     http://xiaoshuo.qqsiot.cn/manager          [] [管理员账号]     admin                                                     [] [渠道商账号]     channel                                                  [] [代理商账号]     age

cocos Creator js 房卡麻将/血战/H5四川麻将源码下载搭建

房卡麻将/血战/H5四川麻将 源码 支持iOS/Android/H5 完整源码 1.基于NODEJS+MYSQL的服务器,成熟的技术方案,高效稳定,且方便Windows开发,Linux平台布署,节约服务器运转成本. 2.采用最新版本的cocos引擎,cocos creator开发,可快速的进行界面调整.且能够快速地发布iOS,Android版本. 3.如需H5版本,只需针对H5平台进行资源优化即可. 4.成熟可靠的房卡式设计,能满足大部分用户使用体验. 5.产品经过大量测试,可以运转稳定. 测试