Android 下载引擎的组件化源于应用场景的广泛性和存储字段的固定性。起初,下载引擎是通过 Module 的形式引入项目的,这种方式的引入在形式上起到了解耦作用,同时,也可针对项目个性化的存储字段进行增减。但随着下载引擎复用需求的增加和业务的积淀,Module 不再是下载引擎的最优引用方式了。首先,随着业务的积淀,存储字段的数量逐渐趋于稳定,这意味着下载引擎已经可以满足大部分的应用场景了;其次,Module 引入项目的方式不利于源码的维护。试想下,如果下载引擎出现了问题,并且修复过程异常复杂,那么每个以 Module 方式引入下载引擎的应用在修复同类问题的时候将会非常痛苦,如果再考虑个性化存储字段,这个修复过程将会变成一场灾难。所以,需要一种更加便捷的引用方式来改变现状,比如:AAR 或者 Maven。
引用方式的改变还是比较棘手的。为了理解这里的困惑,需要了解一下下载引擎的实现方式。下载引擎是通过服务启动下载线程来下载内容的,如果下载的信息有变更,这些信息在入库的同时会通知已注册的观察者,前台会通过内容提供者获取下载信息,并展示在界面上。这里需要注意的是内容提供者,也就是 ContentProvider,同一部手机上是不允许同时存在拥有相同 Authorities 的两个应用的。这意味着下载的引擎的内容提供者应该同时具备动态配置和动态读取 Authorities 的能力。下面,就通过改造让下载引擎来具备这些能力。
more >>
