Android极速开发框架One,只需59秒即可!

One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型, 以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示。 以“复杂的世界里,一个就够了”为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架。

One框架能帮您带来什么?

One框架分为两个项目,OneCore为核心工程,androidOne为演示项目,依赖oneCore

One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型

以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示

以“复杂的世界里,一个就够了”为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架!

异步模块

封装EventBus类,将异步框架单独抽出来,任何耗时操作(不仅仅是网络请求)都可以放到异步模块里

与网络模块分离实现,可以直接写单元测试类测试接口,让接口调试更方便

支持多并发、取消操作

多个请求,一个回调接口处理,让页面代码更简洁

建议一般在BaseActivity、BaseFragment中实现

实现参考类AsyncTaskManager.java

使用参考类BaseActivity.java

使用参考类BaseFragment.java

HTTP请求模块

采用第三方AsyncHttpClient方案,支持http、https方式,支持get、post、put、delete方法,支持GZIP、File格式,支持Retry、Cacel策略,堪称完美!

改造实现SyncHttpClient,支持同步,并支持RESTFUL风格,调接口时可直接单元测试

实现参考类SyncHttpClient.java

DownloadManager资源下载模块

改造实现BreakpointHttpResponseHandler支持多并发、多文件上传、断点续传、暂停、继续、删除下载任务

/*** [下载器管理类,支持并发、暂停、继续、删除任务操作以及断点续传]*DownloadManager downloadMgr = DownloadManager.getInstance();downloadMgr.setDownLoadCallback(new DownLoadCallback(){@Overridepublic void onLoading(String url, int bytesWritten, int totalSize) {super.onLoading(url, bytesWritten, totalSize);}@Overridepublic void onSuccess(String url) {super.onSuccess(url);}@Overridepublic void onFailure(String url, String strMsg) {super.onFailure(url, strMsg);}});//添加下载任务downloadMgr.addHandler(url);***/

BluetoothManager蓝牙处理模块

/*** [蓝牙管理类]**/BluetoothManager bluetoothManager=BluetoothManager.getInstance(newBluetoothCallBack(){        @OverridepublicvoidonStateChange(intbluetoothState,Stringmessage) {switch(bluetoothState){//蓝牙不可用caseBluetoothService.STATE_UNAVAILABLE:NToast.shortToast(mContext,"蓝牙不可用");break;//蓝牙未连接caseBluetoothService.STATE_NONE:NToast.shortToast(mContext,"蓝牙未连接");break;//蓝牙空闲caseBluetoothService.STATE_LISTEN:break;//蓝牙正连接caseBluetoothService.STATE_CONNECTING:NToast.shortToast(mContext,"蓝牙正连接");break;//蓝牙已连接, 当如果连接上了,message就是蓝牙的名称caseBluetoothService.STATE_CONNECTED:NToast.shortToast(mContext,"蓝牙已连接");                    mBluetoothState=true;break;            }        }        @OverridepublicvoidonResult(intrequsetCode,Stringdata) {//回调结果在页面显示}    });//发送蓝牙请求bluetoothManager.request(SEND_INL_CODE, charStr);//断开bluetoothManager.stop();

Common模块

页面堆栈管理ActivityPageManager

各种自定义dialog

支持hybrid开发

各种工具类

各种动画效果

SharedPreferences管理

支持直接put、get对象。

LruCache管理

封装LruCache,只缓存CACHE_SIZE大小的数量,超过CACHE_SIZE自动释放前面的对象,建议页面间传参使用。

Exception系统异常处理

Bugtags是新一代的、专为移动测试而生的缺陷发现及管理工具。移动App集成Bugtags SDK后,测试人员就可以直接在App里所见即所得的提交 bug,SDK会自动截屏、收集App运行时数据,如:设备信息,控制台数据,用户的操作步骤等,团队人员在Bugtags云端高效的跟踪及管理bug。

Parse解析管理

支持XML、JSON、JSOAP解析

一行代码轻松转JAVA对象

采用fastjson实现java、json互转

采用xstream实现Java、xml互转,支持注解解析

自主封装,支持soapObject转Java对象

CacheManager缓存管理

磁盘缓存,缓存对象需实现序列化接口,提供读取、失效,清除方法。一般用于对接口数据的缓存。

/*** 缓存使用示例**@return*@throwsHttpException*/publicAdResponsegetAdList() throws HttpException {        AdResponse response=null;        RequestParams params=getRequestParams();params.put("method","fmms.getAdvertisementList");params.put("data","{}");//根据请求得到唯一的缓存KeyStringkey=getCacheKey(AdResponse.class.getSimpleName());//读取缓存if(CacheManager.isInvalidCache(key,INVALID_TIME_1DAY)){            response=CacheManager.readObject(key);if(response!=null&&response.isSuccess()){returnresponse;            }        }Stringresult=httpManager.post(mContext,Constants.DOMAIN,getSignParams(params), ContentType);if(!TextUtils.isEmpty(result)){//一句话解析成对象response=jsonToBean(result,AdResponse.class);if(response!=null&&response.isSuccess()){//获取数据成功,写入缓存CacheManager.writeObject(response, key);            }        }//最后都没有数据,还是从缓存中取if(response==null){            response=CacheManager.readObject(key);if(response!=null&&response.isSuccess()){returnresponse;            }        }returnresponse;    }

BroadcastManager广播管理

为了发送广播更加方便,自主封装了BroadcastManager,方便好用。

/*** [BroadcastManager使用示例]*//在任何地方发送广播BroadcastManager.getInstance(mContext).sendBroadcast(FindOrderActivity.ACTION_RECEIVE_MESSAGE);//页面在oncreate中初始化广播BroadcastManager.getInstance(mContext).addAction(ACTION_RECEIVE_MESSAGE, new BroadcastReceiver(){@Overridepublic void onReceive(Context arg0, Intent intent) {String command = intent.getAction();if(!TextUtils.isEmpty(command)){if((ACTION_RECEIVE_MESSAGE).equals(command)){//获取json结果String json = intent.getStringExtra("result");//做你该做的事情}}}});//页面在ondestory销毁广播BroadcastManager.getInstance(mContext).destroy(ACTION_RECEIVE_MESSAGE);***/

DB模块

采用GreenDao详见ORM方案,直接实现Java Object的CURD方法就可以操作数据库,非常好用,极力推荐。

实现DBManager,连获取Dao的代码都不用写了,不管通过DaoGenerator生成的对象如何变化,通过DBManager可以让你拿到任何Dao对象,从而实现数据库操作。

DaoGenerator工程自动生成model、dao、session对象等代码,拷过来直接使用即可。

/*** 数据库示例*/publicvoidtestDB(){        NoteDao dao=DBManager.getInstance(getContext()).getDaoSession().getNoteDao();//addfor(int i=0; i<=4; i++){            Note bean=newNote();bean.setComment("comment");bean.setDate(newDate());bean.setText("text");dao.insert(bean);        }//udpateListlist=dao.loadAll();if(!list.isEmpty()){            Note bean=list.get(2);bean.setComment("comment_comment");dao.update(bean);        }//queryif(!list.isEmpty()){for(Note note:list){NLog.e("testDemo",note.getComment());            }        }//deleteif(!list.isEmpty()){dao.delete(list.get(0));        }    }

注解模块

集成butterknife详见注解框架,一个No Magic的Android注入框架,用过的人都说好,极力推荐。

支付模块

集成支付宝支付和微信支付

支付宝示例:客户端封装参数,调用支付宝

StringPARTNER="2088XXXXXXXXXXXX";StringSELLER="demo@yahoo.cn";StringRSA_PRIVATE="私钥";    PayUtils payutils=newPayUtils(activity,PARTNER,SELLER,RSA_PRIVATE,"服务器回调订单地址[异步处理]");payutils.setPayListener(newPayListener() {        @OverridepublicvoidonPayResult(intstate,Stringmessage) {        }    });try{payutils.pay("测试商品","测试商品详情","0.01","唯一订单号,服务器生成");    }catch(Exception e) {e.printStackTrace();    }

支付宝示例:服务器封装所有的参数,返回url直接调用支付宝

PayUtils1 payutils=newPayUtils1(BespeakActivity.this,newPayListener() {        @OverridepublicvoidonPayResult(intstate,Stringmessage) {switch(state) {casePayUtils1.PAY_SUC_CODE:                    MessageDialog dialog=newMessageDialog(mContext,getString(R.string.bespeak_order_suc));dialog.setConfirmListener(newOnClickListener() {                        @OverridepublicvoidonClick(Viewv) {BespeakActivity.this.finish();                        }                    });dialog.show();break;casePayUtils1.PAY_DOING_CODE:casePayUtils1.PAY_GOODS_CODE:casePayUtils1.PAY_INIT_CODE:casePayUtils1.PAY_FAIL_CODE:NToast.shortToast(mContext, message);break;            }        }    });payutils.pay(res.getData().getUrl());

微信支付示例

PayReq payReq=res.getData().getPayReq();payReq.packageValue="Sign=WXPay";IWXAPImsgApi=WXAPIFactory.createWXAPI(this,null);msgApi.registerApp(Constants.WEIXIN_APP_ID);msgApi.sendReq(payReq);

图片下载模块

采用Fresco解决方案,有关使用情况请参见Fresco详见

内存管理、图片的渐进式呈现、Gif图和WebP格式强大的特性让你不能自拔!特性详见

日志

NLog日志输出类

config.properties文件(assets文件夹下)配置日志开关

#is debug mode,ifdebug istruethat log is open,ifdebug isfalsethat log is close.debug=true

教程

优酷视频教程地址,非常感谢融云阿明的辛苦录制!

PPT手把手教程地址

常用网址推荐

Android开发技术周报

http://www.androiddevtools.cn/

android-studio中文站

android-开源项目

结语

看到这里,估计您和您的小伙伴们都惊呆了吧!赶快动手试试吧!

具体使用请参考androidOne演示工程。

我改变不了这个世界!这个世界也休想将我改变!

如果任何问题或者建议,欢迎沟通。

QQ群:195104825

AndroidOne GitHub地址:https://github.com/devinhu/androidone

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容