Android应用框架设计
Android应用框架设计
1.主体框架
应用程序采用MVP架构,关于MVP框架的详细介绍,自行搜索学习,关于MVP框架的选择和实现,应用程序采用开源的MVP框架:https://github.com/sockeqwe/mosby。
2.包结构
所有应用层程序,参考该目录结构进行编写,绿色部分是必须项,浅蓝色部分为可选项,{appname}对应程序的名称,例如开发一个微聊的应用程序,appname为weichat。
2.1.包作用说明
各个包,都具有它自身的一些职责,对应职责的代码放到对应的包目录下,下面将详细解释各个包的职责和它的详细目录结构。
- module
模块,主要实现对应功能模块的视图代码和pensenter,由于pensenter和view强关联,也和应用的功能强关联,因此将他们放到同一目录下。至于service,这里指的是android系统的service,这个包为可选项,如果该功能模块需要后台服务功能,可以创建该包,并把对应功能代码放到该目录下,例如app升级模块功能,需要后台下载。
- serve
服务,一个app,存在一部分业务逻辑的复用,例如初始化服务,推出登陆服务等等,这类服务功能,可供多个模块调用,并且实现对应的服务,需要调用dao、net甚至其他的服务。因此,针对app中的通用服务逻辑代码,在该包下实现。作为服务,必须有它对应的接口申明和实现。
由于服务之前会互相依赖,因此服务对象必须以单例模式进行实现,避免形成递归创建。
- system
系统,app中存在部分与系统相关的功能调用,并且存在复用的情况,为了便于统一管理,以及单元测试,将这部分代码独立出来。
- net
网络,由于app需要对接多套服务器环境,因此,net下根据服务器环境进行包划分,在http网络请求方面,app使用了rxjava+retrofit2+okhttp,因此只需要封装自己的拦截器(该部分代码封装在通用代码库中),对应的app接口代码,声明对应的接口url即可,详细实现这里暂不涉及。
event
事件,这里主要定义eventbus使用的消息事件对象,便于管理整个app的消息事件,对应的消息事件处理,将分布到各个功能模块,或者application中。data
数据,这里包含app的持久化信息,以及常量信息,着重说明一下这里的dao,该部分封装了数据库的访问,采用ormlite框架进行封装,app开发者只需要实现自己的DBManager,管理对应的数据包版本号即可实现对应的数据升级管理。
receiver
广播接收器,这里就是指的android系统的广播接收器,例如在这里面定义接收推送信息的广播接收器,接收通知栏消息的广播接收器等等。third
第三方集成封装,例如关于高德地图或者百度地图的二次封装等。contentprovider
对应android系统contentprovider,对其他app提供对应的数据服务。
3.开源技术框架选用
目前,android开发社区关于app应用开发的各个层面,都存在一些成熟可靠的实现方面,采用合适的技术方案,有助于提高开发效率,改善代码质量,便于维护等等一系列优点,我们不闭门造车,自己封装的往往也没有开源项目的精良。
3.1.数据库
ormlite,ORM的概念在服务器领域的使用已经是稀松平常,应用到android数据开发,有利于简化数据库访问逻辑,降低开发难度,提高代码的可维护性。在这个基础上,我们在数据库访问增加数据缓存层,提高数据库访问效率,降低耗电(访问硬盘比访问内存耗电)。关于缓存的主要实现策略,一个某个缓存的数据发生了变化,就清楚该缓存数据,下次读取时,重新从硬盘中读取,然后缓存,简化缓存管理逻辑。
3.2.http网络访问
rxjava+retrofit2+okhttp,它们的优点就不解释了,反正就选他们了,当然rxjava不仅仅用于网络访问,还运用于app中的逻辑链式调用,线程切换处理等,强大到你难以想象。
3.3.单元测试
robolectric+powermock+mockito+junit,目前android单元测试,这是已知最靠谱的方案。
3.4.事件处理
eventbus,用于处理应用内之间的消息传递,当然还存在其他的处理方案,我们觉得这种方式比较合适。
3.5.内存泄露检测
leakcanary,作为一个有追求的程序员,怎么能容忍内存泄露的存在,改善应用内存泄露情况,就靠它了。
3.6.布局文件依赖注入
butterknife,摆脱findViewById的厄运。当然,在使用androidstudio时,不要忘记了安装Zelezny这个插件,这样在开发过程中,可以更加的偷懒了。