# KJFrameForAndroid **Repository Path**: jiyuren/KJFrameForAndroid ## Basic Information - **Project Name**: KJFrameForAndroid - **Description**: KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全高效的开发APP。我们的目标是用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://my.oschina.net/kymjs/blog - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 181 - **Created**: 2014-12-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## ![logo](data:image/jpeg;base64,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) KJFrameForAndroid简介 ================= 感谢支持KJFrameForAndroid的社区与组织:
[![Android Arsenal](http://img.shields.io/badge/Android%20Arsenal-KJFrameForAndroid-blue.svg?style=flat)](http://android-arsenal.com/details/1/836) [![BlackDuck OpenHUB](https://www.openhub.net/p/KJFrameForAndroid/widgets/project_thin_badge.gif)](https://www.openhub.net/p/KJFrameForAndroid) [![OSChina](https://www.oschina.net/img/logo_s2.gif)](http://www.oschina.net/p/kjframeforandroid)
**KJFrameForAndroid** 又叫KJLibrary,是一个Android的快速开发工具包。同时封装了android中的Bitmap、Http、插件模块加载操作的框架,使开发者更容易轻松实现这些功能;
KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全高效的开发APP。我们的目标是用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。
## KJFrameForAndroid 相关链接 * QQ群:[257053751](http://jq.qq.com/?_wv=1027&k=WoM2Aa)(开发者群1),[201055521](http://jq.qq.com/?_wv=1027&k=MBVdpK)(开发者群2) * 国内用户请访问GIT.OSC:[http://git.oschina.net/kymjs/KJFrameForAndroid](http://git.oschina.net/kymjs/KJFrameForAndroid) * github项目地址:[https://github.com/kymjs/KJFrameForAndroid](https://github.com/kymjs/KJFrameForAndroid) * * 留言版 [http://git.oschina.net/kymjs/KJFrameForAndroid/issues](http://git.oschina.net/kymjs/KJFrameForAndroid/issues) * 版本日志 [http://git.oschina.net/kymjs/KJFrameForAndroid/blob/master/debug_log.txt](http://git.oschina.net/kymjs/KJFrameForAndroid/blob/master/debug_log.txt) --- # 框架使用 **Demo工程运行** : ①[下载](http://git.oschina.net/kymjs/KJFrameForAndroid/repository/archive?ref=master)框架最新源码。 ②选择KJLibraryExample工程导入Eclipse。 ③将/binrary目录KJFrameForAndroid_Vxxx.jar包复制至demo的libs目录。 ④删除[project.properties](http://git.oschina.net/kymjs/KJFrameForAndroid/blob/master/KJLibraryExample/project.properties)文件的最后一行
**在项目中使用** :将/binrary目录最新jar包[KJFrameForAndroid_xxx.jar](http://git.oschina.net/kymjs/KJFrameForAndroid/tree/master/binrary)添加到你工程/libs目录中并引用。
* 由于使用了SDK最新的API函数,以及3.0版Fragment。KJFrameForAndroid框架最低支持API 11。
*注:使用 KJFrameForAndroid 应用开发框架需要在你项目的AndroidManifest.xml文件中加入以下基本权限:* ```xml ``` ---- ## =======各模块使用介绍======= ## Plugin模块 使用Plugin模块可以让你的插件apk不用安装便直接被运行,极大的方便了APP动态更新,且可以轻松实现插件与APP项目之间的解耦。
你可以在[这里](http://git.oschina.net/kymjs/KJFrameForAndroid/attach_files)获取项目示例中插件的Demo apk与源码。更多介绍请看[Plugin模块详细介绍](http://git.oschina.net/kymjs/KJFrameForAndroid/blob/master/PluginLibraryExplain.md)
**现支持以下功能** * apk无需安装即可被应用调用
* Activity的动态加载:包括生命周期和交互事件、R文件资源引用、插件与APP之间的数据通信
* Fragment的完美加载使用
* 动态注册的BroadcastReceiver
* 绑定式、启动式Service均可完美使用
* 已成功模拟出launchMode的效果。(launchModer实际上是一个虚拟的,生命周期的调用还是一样的,仅仅模拟出了系统的BackStack)
* 完美集成了KJFrameForAndroid中UiLibrary->Topology的全部功能,支持注解式绑定控件设置监听
## UILibrary模块 UILibrary包含两个部分Widget(控件)、Topology(Android框架结构继承链) [详细介绍...](http://my.oschina.net/kymjs/blog/284897)
**UILibrary -> Widget控件部分** 主要封装了常用的UI控件,为了不让项目jar包过大,我们只引入了开发中一定会用到的控件,例如:可上下拉的KJScrollView、圆形显示的ImageView,可以双指缩放双击缩放双指旋转的ScaleImageView、等等......更多内容请自行查看项目文件中org.kymjs.kjframe.widget包下的内容
**UILibrary -> Topology拓扑部分** 规范了Activity中数据及控件的初始化,并包含一个使用IOC设计思想的控件初始化方式:可通过注解的方式进行UI绑定,与设置监听,在Activity和Fragment中均可以通过一行代码绑定控件并实现点击监听;同时UILibrary为开发者定义了完善的KJActivity和KJFragment等基类,开发者只需手动继承就可以获得Topology部分的全部功能。
```java public class TabExample extends KJActivity { @BindView(id = R.id.bottombar_content1, click = true) public RadioButton mRbtn1; @BindView(id = R.id.bottombar_content2, click = true) private RadioButton mRbtn2; @Override public void setRootView() { setContentView(R.layout.aty_tab_example); } @Override protected void initWidget() { super.initWidget(); mRbtn1.setText("控件已经初始化绑定并设置了监听"); } @Override public void widgetClick(View v) { super.widgetClick(v); switch (v.getId()) { case R.id.bottombar_content1: ViewInject.toast("点击了mRbtn1"); break; case R.id.bottombar_content2: ViewInject.toast("点击了mRbtn2"); break; } } } ``` ###Topology中各函数调用顺序: setRootView();
@BindView
initDataFromThread();(异步调用,可做耗时操作)
threadDataInited();(initDataFromThread执行完成后才会回调)
initData();
initWidget();
registerBroadcast();
## BitmapLibrary模块 任何View(ImageView设置src,普通View设置bg)加载图片的时候都无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象,同时无需考虑图片加载过程中出现的OOM。默认使用内存lru算法+磁盘lru算法缓存图片 [详细介绍](http://my.oschina.net/kymjs/blog/295001)
**注:**在Android2.3之前,我们常常使用软引用或弱引用的形式去做缓存图片,然而根据Google的描述:垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。BitmapLibrary使用lru算法去管理缓存,同时内存缓存配合磁盘缓存能更有效的管理缓存调用。 ```java KJBitmap kjb = KJBitmap.create(); /** * url不仅支持网络图片显示,同时支持本地SD卡上的图片显示; * view不仅可以是imageview,同时普通view也可以传入,框架会自动识别对imageview设置src对普通view设置bg */ // 载入本地图片 kjb.display(imageView, "file:///storage/sdcard0/1.jpg"); // 载入网络图片 kjb.display(textView, http://www.xxx.com/xxx.jpg); //自定义图片显示大小 kjb.display(view, http://www.xxx.com/xxx.jpg, 80, 80); //如不指定图片大小,默认采用控件大小显示图片 ``` ## HttpLibrary模块 KJLibrary默认对所有Http通信的数据做了缓存处理,缓存时间为5分钟。这么做的目的不仅是为了节省用户手机流量,同时是为了减少服务器压力
HttpLibrary模块使用HttpUrlConnection实现方式实现网络通信、数据上传,使用HttpClient实现文件的断点下载。根据Google建议:在2.3系统之前由于HttpUrlConnection不稳定且有一定的BUG,应该尽量使用HttpClient;在2.3以后的系统,若只是简单的数据交互,应该使用更加轻量级、易扩展的HttpUrlConnection。
###普通get、post方法示例: ```java kjh.get("http://www.oschina.net/", new HttpCallBack();//与post相似,就只写一种了 KJHttp kjh = new KJHttp(); HttpParams params = new HttpParams(); params.put("id", "1"); params.put("name", "kymjs"); kjh.post("http://192.168.1.149/post.php", params, new HttpCallBack() { @Override public void onPreStart() { super.onPreStart(); KJLoger.debug("即将开始http请求"); } @Override public void onSuccess(String t) { super.onSuccess(t); ViewInject.longToast("请求成功"); KJLoger.debug("请求成功:" + t.toString()); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); KJLoger.debug("出现异常:" + strMsg); } @Override public void onFinish() { super.onFinish(); KJLoger.debug("请求完成,不管成功还是失败"); } }); ``` ###post上传文件方法示例: ```php // 文件上传的PHP后台实现示例 0) { echo "Return Code: " . $_FILES["file"]["error"] . "
"; } else { echo "Upload: " . $_FILES["file"]["name"] . "
"; echo "Type: " . $_FILES["file"]["type"] . "
"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } ?> ``` ```java private void upload() { HttpParams params = new HttpParams(); //支持一次传递多个文件,这里使用UtilsLibrary中的工具类获取一个文件 params.put("file", FileUtils.getSaveFile("KJLibrary", "logo.jpg")); kjh.post("http://192.168.1.149/kymjs/hello.php", params, new HttpCallBack() { @Override public void onSuccess(String t) { super.onSuccess(t); ViewInject.toast("文件上传完成"); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); ViewInject.toast("文件上传失败" + strMsg); } }); } ``` ###断点下载方法示例: ```java kjh.download(mEtDownloadPath.getText().toString(), FileUtils.getSaveFile("KJLibrary", "l.pdf"), new HttpCallBack() { @Override public void onSuccess(File f) { super.onSuccess(f); KJLoger.debug("success"); ViewInject.toast("下载成功"); mProgress.setProgress(mProgress.getMax()); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); KJLoger.debug("onFailure"); } /* onLoading方法只在下载方法中有效,且每秒回调一次 */ @Override public void onLoading(long count, long current) { super.onLoading(count, current); mProgress.setMax((int) count); mProgress.setProgress((int) current); KJLoger.debug(count + "------" + current); } }); ``` ## DBLibrary模块 包含了android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。
DB模块,很大程度上参考了[finalDB](https://github.com/kymjs/afinal)的设计,并在此基础上完善了几乎全部的API注释,与更多可定制的DB操作
```java //普通数据存储 KJDB db = KJDB.create(this); User ugc = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性 ugc.setEmail("kymjs123@gmail.com"); ugc.setName("kymjs"); db.save(ugc); ``` ```java //一对多数据存储 public class Parent{ //JavaBean private int id; @OneToMany(manyColumn = "parentId") private OneToManyLazyLoader children; /*....*/ } public class Child{ //JavaBean private int id; private String text; @ManyToOne(column = "parentId") private Parent parent; /*....*/ } List all = db.findAll(Parent.class); for( Parent item : all){ if(item.getChildren ().getList().size()>0) ViewInject.toast(item.getText() + item.getChildren().getList().get(0).getText()); } ``` ## 关于作者kymjs blog:http://my.oschina.net/kymjs/blog
email:kymjs123@gmail.com