城市管理是城市发展的永恒主题。目前各种资源集中于城市,城市管理随着城市的复杂性也呈现出多维度、多结构、多层次、分系统的复杂特征。只有不断提高城市管理水平、加强城市管理、改善服务质量,才能提高政府公共管理服务水平,提高城市综合竞争力和对外开放水平。随着现代信息技术的飞速发展,城市管理模式面临着新的机遇与挑战,能不能全面实现数字化智慧化移动化管理,将是未来城市管理模式成功与否的重要评价指标。
采用“互联网+”的模式,把包括民生、环保、公共安全、城市服务、工商业活动在内的各种需求做出智能化的响应,利用信息通信技术以及互联网平台,让互联网与传统行业进行深度融合,创造新的发展生态,智慧化的移动办公是我们做智慧城市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或者功能的个性化配置。

工程样例

  • Sample: 智慧城市APP平台架构的Demo样例。
  • Document: 公共库的javadoc文档。