android app一般性架构设计
一.UI层(Activity+Fragment基类设计+部分自定义控件)
KJActivity(Activity继承链的规范)
I_KJActivity,KJFrameActivity接口协议,将Activity需要实现的方法提取成一个接口。
I_BroadcastReg,规范Activity中广播接受者注册的接口协议
I_SkipActivity,规范Activity跳转的接口协议
I_KJActivity基类中集成了网络请求及其回调的方法。其中持有ThreadDataCallBack、KJActivityHandle,这两个都是与网络请求相关的。
KJFragment
- 与KJActivity的设计思路基本一致
KJAdapter&AdapterHolder
- 一个比较出彩的设计在于监听了listview的滚动,可以根据这个来优化图片加载,在listview停下来之后,再去加载图片。这个逻辑是可以放在基类adapter中的。
二.本地数据层
数据库
DBLibrary come from afinal->finalDB,具体实现未细致看
文件
sharepreference
PreferenceHelper SharedPreferences操作工具包
三.网络层
Http-KJHttp框架
基础功能
KJHttp是专为解决Android中Http通信而产生的,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速开发。
KJHttp自带了数据缓存功能,你所访问的Http数据都将在本地建立一个缓存,默认的缓存时间是5分钟,也就是5分钟以内相同的请求都不会经过网络,而是从本地缓存中直接读取。当然对于及时性要求较高的新闻类应用,你也可以关闭这个特性或者只需要将缓存时间设置成0就行了~
httpconfig = new HttpConfig();
httpconfig.cacheTime = 0;
kjhttp = new KJHttp(httpconfig);
KJHttp支持JSON格式参数提交、AJAX方式的Form表单参数提交,文件与图片的上传下载,同时支持根据你的需求所发起的自定义Request。
工作原理(看过我之前书写过的网络框架系列的人应该可以看出来这个网络框架的设计完全与volley、simplenet原理完全一致)
整个KJHttp工作流程:采用责任链设计模式,由三部分组成,类似设计可以类比Handle…Looper…MessageQueue
1. KJHttp负责不停向NetworkQueue(或CacheQueue实际还是NetworkQueue, 具体逻辑请查看 {@link CacheDispatcher})添加Request
2. 另一边由TaskThread不停从NetworkQueue中取Request并交给Network执行器(逻辑请查看 {@link NetworkDispatcher} ),
3. Network执行器将执行成功的NetworkResponse返回给TaskThead,并通过Request的定制方法 {@link Request#parseNetworkResponse()}封装成Response,最终交给分发器 {@link Delivery} 分发到主线程并调用HttpCallback相应的方法
我大致浏览了这个框架的源码,它的入口是KJHttp,其他和simplenet、volley的实现几乎一模一样。之前分析过simplenet和volley,这里不再细致分析,感兴趣的可以去看我前面写的一系列博客。
对这个http框架的更多解释见:http://www.kymjs.com/code/2015/05/12/01/
图片-KJBitmap
KJBitmap是一个帮助Android开发者加载网络图片的类库。使用KJBitmap可以很方便的加载网络图片,而不用考虑对图片缓存以及OOM问题的处理(因为框架都帮你做好了)。
KJHttp可以看做是一个队列类,而本方法不断的向这个队列添加request;另一方面,TaskThread不停的从这个队列中取request并执行。类似的设计可以参考Handle…Looper…MessageQueue的关系。
我大致浏览了一下代码,认为整体的实现应该是参考volley内部imageloader。
对这个图片网络库的更多介绍可见:
http://www.kymjs.com/code/2015/03/25/01/
http://www.kymjs.com/code/2015/09/24/01/
四.基础层
工具类
CipherUtils加密与解密的工具类
DensityUtils系统屏幕的一些操作
FileUtils文件与流处理工具类
ImageUtils图片工具类
KJLoger应用程序的Log管理
StringUtils字符串操作工具包
SystemTool系统信息工具包
ViewUtils系统界面工具类