Android运用开发结构 KJFrameForAndroid-Android-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:257回复:0

  Android运用开发结构 KJFrameForAndroid

楼主#
更多 发布于:2016-05-31 16:31

KJFrameForAndroid简介

KJFrameForAndroid 又叫KJLibrary,是一个Android的迅速开发工具包。一起封装了android中的Bitmap、Http、插件模块加载操作的结构,使开发者更简略轻松完结这些功用;

KJFrameForAndroid的规划思维是经过封装Android原生SDK中杂乱的杂乱操作而到达简化Android运用级开发,终究完结迅速而又安全高效的开发APP。咱们的方针是用起码的代码,完结最多的操作,用最高的功率,完结最杂乱的功用。

KJFrameForAndroid 有关连接

blog:http://my.oschina.net/kymjs/blog

QQ群:257053751(开发者群1),201055521(开发者群2)

github项目地址:https://github.com/kymjs/KJFrameForAndroid

版别日志

http://git.oschina.net/kymjs/KJFrameForAndroid/blob/master/debug_log.txt

结构运用

实践项目中的运用办法演示:KJMusic音乐播放器 Demo工程运转

①下载结构最新源码。

②选择KJLibraryExample工程导入Eclipse。

③将/binrary目录KJFrameForAndroid_Vxxx.jar包仿制至demo的libs目录。

④删去project.properties文件的最后一行

在项目中运用 :将/binrary目录最新jar包KJFrameForAndroid_xxx.jar增加到你工程/libs目录中并引证。

因为运用了SDK最新的API函数,以及3.0版Fragment。KJFrameForAndroid结构最低支撑API 11。

注:运用 KJFrameForAndroid 运用开发结构需求在你项意图AndroidManifest.xml文件中参加以下根本权限:

=======各模块运用介绍=======

Plugin模块

运用Plugin模块能够让你的插件apk不必装置便直接被运转,极大的方便了APP动态更新,且能够轻松完结插件与APP项目之间的解耦。

你能够在这儿获取项目示例中插件的Demo apk与源码。更多介绍请看Plugin模块具体介绍

现支撑以下功用

apk无需装置即可被运用调用

Activity的动态加载:包括生命周期和交互事件、R文件资本引证、插件与APP之间的数据通信

Fragment的完美加载运用

动态注册的BroadcastReceiver

绑定式、发动式Service均可完美运用

已成功模拟出launchMode的作用。(launchModer实践上是一个虚拟的,生命周期的调用仍是相同的,只是模拟出了体系的BackStack)

完美集成了KJFrameForAndroid中UiLibrary->Topology的悉数功用,支撑注解式绑定控件设置监听

UILibrary模块

UILibrary包括两个有些Widget(控件)、Topology(Android结构结构承继链) 具体介绍…

UILibrary -> Widget控件有些 主要封装了常用的UI控件,为了不让项目jar包过大,咱们只引入了开发中必定会用到的控件,例如:可上下拉的KJScrollView、圆形显现的ImageView,能够双指缩放双击缩放双指旋转的ScaleImageView、等等……更多内容请自行检查项目文件中org.kymjs.kjframe.widget包下的内容

UILibrary -> Topology拓扑有些 标准了Activity中数据及控件的初始化,并包括一个运用IOC规划思维的控件初始化办法:可经过注解的办法进行UI绑定,与设置监听,在Activity和Fragment中均能够经过一行代码绑定控件并完结点击监听;一起UILibrary为开发者界说了完善的KJActivity和KJFragment等基类,开发者只需手动承继就能够取得Topology有些的悉数功用。

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();@BindViewinitDataFromThread();(异步调用,可做耗时操作)threadDataInited();(initDataFromThread履行完结后才会回调)initData();initWidget();registerBroadcast();

BitmapLibrary模块

任何View(ImageView设置src,一般View设置bg)加载图像的时分都无需思考图像加载过程中呈现的oom和android容器迅速滑动时分呈现的图像错位等景象,一起无需思考图像加载过程中呈现的OOM。默许运用内存lru算法+磁盘lru算法缓存图像

具体介绍

注:在Android2.3之前,咱们常常运用软引证或弱引证的形式去做缓存图像,但是依据Google的描绘:废物收回器会更倾向于收回持有软引证或弱引证的目标,这让软引证和弱引证变得不再牢靠。别的,Android

3.0 (API Level

11)中,图像的数据会存储在本地的内存当中,因此无法用一种可预见的办法将其开释,这就有潜在的危险造成运用程序的内存溢出并崩溃。BitmapLibrary运用lru算法去办理缓存,一起内存缓存合作磁盘缓存能更有用的办理缓存调用。

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办法示例:

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后台完结示例 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"]; } }?> 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);            }      });}

断点下载办法示例:

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的规划,并在此基础上完善了几乎悉数的API注释,与更多可定制的DB操作

//一般数据存储KJDB db = KJDB.create(this);User ugc = new User();

//这a需求留a意的是User目标必须有id特点,或许有经过@ID注解的特点ugc.setEmail("kymjs123@gmail.com")a;ugc.setName("kymjs");db.save(ugc);//一对多数据存储public

class Parent{ //JavaBean     private int id;     @OneToMany(manyColumn =

"parentId")     private OneToManyLazyLaoader

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 ().getLiast().size()>a0)          

ViewInject.toast(item.getText() +

item.getChildren().getList().get(0).getText());}

优质IT资源分享社区为你提供此文。

站有大量优质android教程视频,资料等资源,包含android基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

android教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客