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

更多相关文章

  1. Android(安卓)- 图片处理之Glide4.0
  2. Android(安卓)自带email应用对html支持不完善
  3. MMKV学习(三)Android使用
  4. Android(安卓)LruCache原理及使用(对象软引用不行,使用LRU算法)
  5. Android(安卓)OpenGL ES 基础篇
  6. Android(安卓)仿Facebook滑动菜单-支持android 2.2
  7. QT应用程序开发到Android
  8. android xutils框架的使用
  9. Android(安卓)FastJson,json解析

随机推荐

  1. 急找工作,想用java语言做一个小的软件,请高
  2. 开发网站相关知识html和javascript
  3. 为内存密集型应用程序增加JVM最大堆大小
  4. Ldap 修改用户密码及安装证书
  5. java写入文件的几种方法小结
  6. 使用webmagic编写Java爬虫获取博客园文章
  7. java 百度地图判断两点距离1
  8. 我的程序员成长之路
  9. java实现能计算10道基本运算的计算器
  10. 黑马程序员_Java基础_异常