| 你還在為 App 開發(fā)技術(shù)選型而煩惱嗎?你還在每天花大量的時(shí)間在寫重復(fù)的代碼上嗎?沒錯(cuò)! 今天就是要給大家分享一款能節(jié)省大量時(shí)間 省去很多重復(fù)代碼coding 專注于邏輯思考的開發(fā)框架 oneCore 閃亮登場(chǎng)~! 一個(gè)牛逼哄哄的Android框架One One框架能幫您帶來(lái)什么? One框架分為兩個(gè)項(xiàng)目,OneCore為核心工程,androidOne為演示項(xiàng)目,依賴oneCore One整個(gè)框架為MVC模式搭建,基于android framework為核心,集成Android世界中的主流技術(shù)選型 以Pragmatic風(fēng)格的Android應(yīng)用參考示例,是android項(xiàng)目最佳實(shí)踐的總結(jié)與演示 以“復(fù)雜的世界里,一個(gè)就夠了”為理念,勵(lì)志幫助Android開發(fā)人員快速搭建一個(gè)簡(jiǎn)單高效的android開發(fā)框架! 異步模塊 封裝EventBus類,將異步框架單獨(dú)抽出來(lái),任何耗時(shí)操作(不僅僅是網(wǎng)絡(luò)請(qǐng)求)都可以放到異步模塊里 與網(wǎng)絡(luò)模塊分離實(shí)現(xiàn),可以直接寫單元測(cè)試類測(cè)試接口,讓接口調(diào)試更方便 支持多并發(fā)、取消操作 多個(gè)請(qǐng)求,一個(gè)回調(diào)接口處理,讓頁(yè)面代碼更簡(jiǎn)潔 建議一般在BaseActivity、BaseFragment中實(shí)現(xiàn) 實(shí)現(xiàn)參考類 AsyncTaskManager.java 使用參考類 BaseActivity.java 使用參考類 BaseFragment.java HTTP請(qǐng)求模塊 采用第三方AsyncHttpClient方案,支持http、https方式,支持get、post、put、delete方法,支持GZIP、File格式,支持Retry、Cacel策略,堪稱完美! 改造實(shí)現(xiàn)SyncHttpClient,支持同步,并支持RESTFUL風(fēng)格,調(diào)接口時(shí)可直接單元測(cè)試 實(shí)現(xiàn)參考類 SyncHttpClient.java DownloadManager資源下載模塊 改造實(shí)現(xiàn)BreakpointHttpResponseHandler支持多并發(fā)、多文件上傳、斷點(diǎn)續(xù)傳、暫停、繼續(xù)、刪除下載任務(wù) [code] /** * [下載器管理類,支持并發(fā)、暫停、繼續(xù)、刪除任務(wù)操作以及斷點(diǎn)續(xù)傳] * DownloadManager downloadMgr = DownloadManager.getInstance(); downloadMgr.setDownLoadCallback(new DownLoadCallback(){ @Override public void onLoading(String url, int bytesWritten, int totalSize) { super.onLoading(url, bytesWritten, totalSize); } @Override public void onSuccess(String url) { super.onSuccess(url); } @Override public void onFailure(String url, String strMsg) { super.onFailure(url, strMsg); } }); //添加下載任務(wù) downloadMgr.addHandler(url); * **/ BluetoothManager藍(lán)牙處理模塊 [code] /** * [藍(lán)牙管理類] * */ BluetoothManager bluetoothManager = BluetoothManager.getInstance(new BluetoothCallBack(){ @Override public void onStateChange(int bluetoothState, String message) { switch(bluetoothState){ //藍(lán)牙不可用 case BluetoothService.STATE_UNAVAILABLE: NToast.shortToast(mContext, "藍(lán)牙不可用"); break; //藍(lán)牙未連接 case BluetoothService.STATE_NONE: NToast.shortToast(mContext, "藍(lán)牙未連接"); break; //藍(lán)牙空閑 case BluetoothService.STATE_LISTEN: break; //藍(lán)牙正連接 case BluetoothService.STATE_CONNECTING: NToast.shortToast(mContext, "藍(lán)牙正連接"); break; //藍(lán)牙已連接, 當(dāng)如果連接上了,message就是藍(lán)牙的名稱 case BluetoothService.STATE_CONNECTED: NToast.shortToast(mContext, "藍(lán)牙已連接"); mBluetoothState = true; break; } } @Override public void onResult(int requsetCode, String data) { //回調(diào)結(jié)果在頁(yè)面顯示 } }); //發(fā)送藍(lán)牙請(qǐng)求 bluetoothManager.request(SEND_INL_CODE, charStr); //斷開 bluetoothManager.stop(); Common模塊 頁(yè)面堆棧管理ActivityPageManager 各種自定義dialog 支持hybrid開發(fā) 各種工具類 各種動(dòng)畫效果 SharedPreferences管理 支持直接put、get對(duì)象。 LruCache管理 封裝LruCache,只緩存CACHE_SIZE大小的數(shù)量,超過(guò)CACHE_SIZE自動(dòng)釋放前面的對(duì)象,建議頁(yè)面間傳參使用。 Exception系統(tǒng)異常處理 Bugtags是新一代的、專為移動(dòng)測(cè)試而生的缺陷發(fā)現(xiàn)及管理工具。移動(dòng)App集成Bugtags SDK后,測(cè)試人員就可以直接在App里所見即所得的提交 bug,SDK會(huì)自動(dòng)截屏、收集App運(yùn)行時(shí)數(shù)據(jù),如:設(shè)備信息,控制臺(tái)數(shù)據(jù),用戶的操作步驟等,團(tuán)隊(duì)人員在Bugtags云端高效的跟蹤及管理bug。 Parse解析管理 支持XML、JSON、JSOAP解析 一行代碼輕松轉(zhuǎn)JAVA對(duì)象 采用fastjson實(shí)現(xiàn)java、json互轉(zhuǎn) 采用xstream實(shí)現(xiàn)Java、xml互轉(zhuǎn),支持注解解析 自主封裝,支持soapObject轉(zhuǎn)Java對(duì)象 CacheManager緩存管理 磁盤緩存,緩存對(duì)象需實(shí)現(xiàn)序列化接口,提供讀取、失效,清除方法。一般用于對(duì)接口數(shù)據(jù)的緩存。 [code] /** * 緩存使用示例 * * @return * @throws HttpException */ public AdResponse getAdList() throws HttpException { AdResponse response = null; RequestParams params = getRequestParams(); params.put("method", "fmms.getAdvertisementList"); params.put("data", "{}"); //根據(jù)請(qǐng)求得到唯一的緩存Key String key = getCacheKey(AdResponse.class.getSimpleName()); //讀取緩存 if(CacheManager.isInvalidCache(key, INVALID_TIME_1DAY)){ response = CacheManager.readObject(key); if(response != null && response.isSuccess()){ return response; } } String result = httpManager.post(mContext, Constants.DOMAIN, getSignParams(params), ContentType); if(!TextUtils.isEmpty(result)){ //一句話解析成對(duì)象 response = jsonToBean(result, AdResponse.class); if(response != null && response.isSuccess()){ //獲取數(shù)據(jù)成功,寫入緩存 CacheManager.writeObject(response, key); } } //最后都沒有數(shù)據(jù),還是從緩存中取 if(response == null){ response = CacheManager.readObject(key); if(response != null && response.isSuccess()){ return response; } } return response; } BroadcastManager廣播管理 為了發(fā)送廣播更加方便,自主封裝了BroadcastManager,方便好用。 [code] /** * [BroadcastManager使用示例] * //在任何地方發(fā)送廣播 BroadcastManager.getInstance(mContext).sendBroadcast(FindOrderActivity.ACTION_RECEIVE_MESSAGE); //頁(yè)面在oncreate中初始化廣播 BroadcastManager.getInstance(mContext).addAction(ACTION_RECEIVE_MESSAGE, new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent intent) { String command = intent.getAction(); if(!TextUtils.isEmpty(command)){ if((ACTION_RECEIVE_MESSAGE).equals(command)){ //獲取json結(jié)果 String json = intent.getStringExtra("result"); //做你該做的事情 } } } }); //頁(yè)面在ondestory銷毀廣播 BroadcastManager.getInstance(mContext).destroy(ACTION_RECEIVE_MESSAGE); * **/ DB模塊 采用GreenDaoORM方案,直接實(shí)現(xiàn)Java Object的CURD方法就可以操作數(shù)據(jù)庫(kù),非常好用,極力推薦。 實(shí)現(xiàn)DBManager,連獲取Dao的代碼都不用寫了,不管通過(guò)DaoGenerator生成的對(duì)象如何變化,通過(guò)DBManager可以讓你拿到任何Dao對(duì)象,從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。 DaoGenerator工程自動(dòng)生成model、dao、session對(duì)象等代碼,拷過(guò)來(lái)直接使用即可。 [code] /** * 數(shù)據(jù)庫(kù)示例 */ public void testDB(){ NoteDao dao = DBManager.getInstance(getContext()).getDaoSession().getNoteDao(); //add for(int i=0; i<=4; i++){ Note bean = new Note(); bean.setComment("comment"); bean.setDate(new Date()); bean.setText("text"); dao.insert(bean); } //udpate List<Note> list = dao.loadAll(); if(!list.isEmpty()){ Note bean = list.get(2); bean.setComment("comment_comment"); dao.update(bean); } //query if(!list.isEmpty()){ for(Note note : list){ NLog.e("testDemo", note.getComment()); } } //delete if(!list.isEmpty()){ dao.delete(list.get(0)); } } 注解模塊 集成butterknife注解框架,一個(gè)No Magic的Android注入框架,用過(guò)的人都說(shuō)好,極力推薦。 支付模塊 集成支付寶支付和微信支付 支付寶示例:客戶端封裝參數(shù),調(diào)用支付寶 [code] String PARTNER = "2088XXXXXXXXXXXX"; String SELLER = "demo@yahoo.cn"; String RSA_PRIVATE = "私鑰"; PayUtils payutils = new PayUtils(activity, PARTNER, SELLER, RSA_PRIVATE, "服務(wù)器回調(diào)訂單地址[異步處理]"); payutils.setPayListener(new PayListener() { @Override public void onPayResult(int state, String message) { } }); try { payutils.pay("測(cè)試商品", "測(cè)試商品詳情", "0.01", "唯一訂單號(hào),服務(wù)器生成"); } catch (Exception e) { e.printStackTrace(); } 支付寶示例:服務(wù)器封裝所有的參數(shù),返回url直接調(diào)用支付寶 [code] PayUtils1 payutils= new PayUtils1(BespeakActivity.this, new PayListener() { @Override public void onPayResult(int state, String message) { switch (state) { case PayUtils1.PAY_SUC_CODE: MessageDialog dialog = new MessageDialog(mContext, getString(R.string.bespeak_order_suc)); dialog.setConfirmListener(new OnClickListener() { @Override public void onClick(View v) { BespeakActivity.this.finish(); } }); dialog.show(); break; case PayUtils1.PAY_DOING_CODE: case PayUtils1.PAY_GOODS_CODE: case PayUtils1.PAY_INIT_CODE: case PayUtils1.PAY_FAIL_CODE: NToast.shortToast(mContext, message); break; } } }); payutils.pay(res.getData().getUrl()); 微信支付示例 [code] PayReq payReq = res.getData().getPayReq(); payReq.packageValue = "Sign=WXPay"; IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null); msgApi.registerApp(Constants.WEIXIN_APP_ID); msgApi.sendReq(payReq); 圖片下載模塊 采用universal-image-loader解決方案,有關(guān)使用情況請(qǐng)參見universal-image-loader 為了提供用戶體驗(yàn),建議在listview或者gridview在滑動(dòng)的時(shí)候不加載圖片 [code]refreshlistview.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true)); 日志 NLog日志輸出類 config.properties文件(assets文件夾下)配置日志開關(guān) [code]#is debug mode, if debug is true that log is open, if debug is false that log is close. debug=true 教程 優(yōu)酷視頻教程地址,非常感謝融云阿明的辛苦錄制! PPT手把手教程地址 結(jié)語(yǔ) 看到這里,估計(jì)您和您的小伙伴們都驚呆了吧!趕快動(dòng)手試試吧! 具體使用請(qǐng)參考androidOne演示工程。 我改變不了這個(gè)世界!這個(gè)世界也休想將我改變! 如果任何問(wèn)題或者建議,歡迎溝通。 | 
|  | 
來(lái)自: 放松神經(jīng) > 《Android》