智慧城市APP平台架构
城市管理是城市发展的永恒主题。目前各种资源集中于城市,城市管理随着城市的复杂性也呈现出多维度、多结构、多层次、分系统的复杂特征。只有不断提高城市管理水平、加强城市管理、改善服务质量,才能提高政府公共管理服务水平,提高城市综合竞争力和对外开放水平。随着现代信息技术的飞速发展,城市管理模式面临着新的机遇与挑战,能不能全面实现数字化智慧化移动化管理,将是未来城市管理模式成功与否的重要评价指标。
采用“互联网+”的模式,把包括民生、环保、公共安全、城市服务、工商业活动在内的各种需求做出智能化的响应,利用信息通信技术以及互联网平台,让互联网与传统行业进行深度融合,创造新的发展生态,智慧化的移动办公是我们做智慧城市APP的根本目的。
平台设计原则
智慧城市APP平台设计之初主要是解决以下两个问题:
- 统一账户体系:包括民生、环保、教育等各种单品APP和智慧城市平台APP有一个统一的账号体系。
- 项目代码复用:智慧城市平台APP的工程代码可以直接(或者最大可能的)复用之前的各种单品APP项目的工程代码。
平台设计方案
总体架构设计
系统总架构主要是包括一个commonLib底层公共库,一个plugin插件化集成模块,一个platform平台配置模块。
- commonLib公共库包括两个方面:
- 工具库:提供底层联网请求、图片处理、数据库操作和LOG打印工具类等。
- 组件库:登陆注册组件、APP升级组件等各种APP通用的功能模块。
- plugin插件整合智慧城市APP需要的各个子项目,包括精准扶贫、教育、医疗等各基层服务。
- platform平台提供配置,配置智慧城市APP的在手机上显示的图标文字等个性化的信息。
系统总体架构图如下:
公共库模块设计
公共库模块commonLib是整个设计的底层框架,包含两个大部分,核心库core(提供联网接口、数据库接口、工具类等)和组件库component(包括统一的登录人口、APP升级模块等)。
网络
网络框架采用Retrofit2+Rxjava+Okhttp,Retrofit2是Square公司开发的现在非常流行的网络框架,Rxjava一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。Retrofit2采用@URL注解的方式支持GET、POST、DELETE、PUT等请求方式,封装了GSON解析json数据的框架,配合Rxjava进行响应式联网请求,代码书写简单方便,联网响应速度快,代码可维护性好。它们的特点是:
- 支持HTTP2/SPDY黑科技;
- socket自动选择最好路线,并支持自动重连;
- 拥有自动维护的socket连接池,减少握手次数;
- 拥有队列线程池,轻松写并发;
- 拥有Interceptors轻松处理请求与响应(比如透明GZIP压缩,LOGGING);
- 基于Headers的缓存策略;
- 异步联网请求调用。
数据库
网络框架采用Greendao,Greendao也是Square公司开发的精简版本数据库框架,它的特点是:
- 使用简单;
- 数据库读写性能最大化;
- 内存开销最小化;
- APIs接口文档简单易懂;
- 针对移动端进行了大量的优化。
图片处理
图片处理框架采用Glide,这个库被广泛的运用在google的开源项目中,包括google I/O大会上发布的官方app,它的特点是:
- 使用简单;
- 可配置度高自适应程度高;
- 支持常见图片格式 Jpg png gif webp;
- 支持多种数据源、网络、本地、资源、Assets等;
- 高效缓存策略:支持Memory和Disk图片缓存;
- 默认Bitmap格式采用RGB_565内存使用至少减少一半;
- 生命周期集成:根据Activity/Fragment生命周期自动管理请求;
- 高效处理Bitmap:使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力。
内存检查
内存检查采用Leakcanary,它的特点是:
- 使用简单;
- 内存检查的结果可视化;
- APIs接口文档简单易懂;
- 提供debug和release两个版本分别集成,release版本包大小非常小。
工具类
提供统一工具类如下:
- 公共的打印LOG类;
- 统一的缓存处理类;
- 统一的程序异常处理机制;
- 统一的列表、对话框、弹出窗等的显示;
- 公共的Activity管理,APP生命周期管理工具类;
- 公共的文件、转码、日期转换、字符串处理、加解密和手机系统信息收集等工具类。
组件库
公共库里面包含一个组件库。组件化就是基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件,达到减少耦合的目的。
组件化开发的好处是把系统级的控制力度细化到组件级的控制力度。一个复杂系统的构建最后就是组件集成的结果,每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署。
产品组件化后能够实现完整意义上的按需求进行产品配置和销售,用户可以选择使用那些组件,组件之间可以灵活的组建。
配置管理、开发、测试、打包、发布完全控制到组建层面,并带来很多好处。比如一个组件小版本进行升级,如果对外提供的接口没有发生任何变化,其他组件完全不需要再进行测试。
目前公共库提供的组件:
- 登录组件;
- 应用自升级组件。
插件模块设计
插件模块plugin是整个架构的业务核心,智慧城市的各大子项目(业务):扶贫、民生、健康、教育、医疗、出行和公共服务都是一个个独立的插件。各个子项目可以有各自独立的业务功能,同时可以独立开发、测试和发布;也可以通过platform模块把多个子项目打包成一个完整的智慧城市平台APP发布。
平台模块设计
平台模块platform是整个架构的配置核心,智慧城市的各个子项目(plugin):扶贫、民生、健康、教育、医疗、出行和公共服务都是一个个独立的插件。通过platform模块配置可以把一个子项目单独发布,也可以把多个子项目打包成一个完整的智慧城市平台APP发布。
平台模块配置的内容:
- 手机桌面的启动icon名字、icon图标信息;
- 各个子项目的闪屏页图片、单独发布子项目时的登陆和注册页逻辑;
- 各个项目的UI或者功能的个性化配置。