老早老早以前,版本更新代码里有一个 VersionManager 类,管理的所有的一切,也曾在那基础上新增需求。只知道,好复杂。
趁有空,稍微理了下。
IApkUpdate 升级接口,主要定义了几个回调方法。两个子类,升级通知接口,用于通知栏。升级对话框接口,用于应用上弹升级对话框。相应的实现类是 ApkUpdateNotification, ApkUpdateDialog。
IApkDownloadLogic 升级逻辑接口,主要定义了开始下载,安装应用等方法。实现类ApkDownloadLogic(单例)持有三个对象,分别是 下载类,对话框,通知栏。
当 ApkDownloader 开始下载,下载进度,下载完成,下载失败时,都会 EventBus 将事件通知给 ApkDownloadLogic,然后再转告给 对话框,通知栏。
UpdateManager 类则是负责一些业务的逻辑,比如一周内关闭三次不再弹升级对话框。该类是对外开放的。比如,首页请求完接口之后,直接调用 UpdateManager.show() 弹出升级对话框。注意,这里并没有持有 对话框,通知栏的对象。
以上都是在 common-ui 模块里,公用UI。
而 ApkUpdateNotification,ApkUpdateDialog 则是在上层模块(引入common-ui 模块)。 这样设计是为了上层模块可以定制属于自己的通知栏,对话框等。而不用修改底层的逻辑。