KJFrameForAndroid框架分析

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系统界面工具类

第三方库

更多资料介绍

===========================各模块介绍====================== Plugin模块 你想像过不安装一个apk而直接被应用调用吗?你考虑过将应用的某一个功能单独出来像文件一样随时读取吗?插件化模块可以轻松帮你实现apk动态加载,让你的应用调用未安装的apk。 UILibrary模块包括两部分: Widget控件部分 主要封装了常用的UI控件,为了不让项目jar包过大,我们只引入了开发中一定会用到的控件,例如:可上下拉的KJListView、可上下拉的KJScrollView、可以双指缩放双击缩放双指旋转的ScaleImageView、等等......更多内容请自行查看项目文件中.widget包下的内容 Topology拓扑部分 包含一个使用IOC设计思想的控件初始化方式:可通过注解的方式进行UI绑定,与设置监听,在Activity和Fragment中均可以通过一行代码绑定控件并实现点击监听;还包含了在目前应用开发中常见的布局界面,如侧滑效果,高效的底部TAB导航,3D效果的切换。同时UILibrary为开发者定义了完善的BaseActivity和BaseFragment,开发者只需手动继承就可以获得Topology部分的全部功能。 BitmapLibrary模块 一行代码实现网络图片加载,任何View(ImageView设置src,普通View设置bg)加载图片的时候都无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象,同时无需考虑图片加载过程中出现的OOM。默认使用内存lru算法+磁盘lru算法缓存图片,同时节省内存消耗默认采用控件的大小作为图片的大小加载图片。 HttpLibrary模块 可以一行代码实现Http请求、一行代码实现文件或图片的上传与下载。 kjh.download( url, params, callback); KJLibrary默认对所有Http通信的数据做了缓存处理,缓存时间为5分钟。这么做的目的不仅是为了节省用户手机流量,同时是为了减少服务器压力 同时不同于afinal的下载BUG(请看这里:http://my.oschina.net/kymjs/blog/355944),KJFrameForAndroid原生支持文件断点下载。 DBLibrary模块 可以一行代码对数据库进行增删改查等操作:kjdb.update(); kjdb.add(); ....... 包含了android中的orm框架,使用了线程池对sqlite进行操作,一行代码就可以进行增删改查。支持一对多,多对一等查询 帮助文档:http://kjframe.github.io/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值