coderFrameworkV0.1 應用開發架構 實現Handler+Thread的參數化封裝

來源:互聯網
上載者:User

先聲明一下,說什麼架構其實是為了吸引一下大家,哈哈,其實只是把自己在開發過程中的代碼想辦法的去整合在一起,讓自己以及團隊成員快速的盡量的少寫很多代碼。先整理出第一個版本,也歡迎更多的有志之士加入這個代碼重構的架構中來,我相信通過我們大家的共同努力我們一定會寫出優秀高效的代碼,說一下自己後期的一些目標以及這個整合的架構代碼裡。無論我寫得是否為好,請大家不要吐槽。

此架構預計完成的封裝及重構的目標是:

1、 封裝了Handler+Thread 【0.1版本已完成】

2、 封裝HTTP請求【後續推出】

3、 對Sqlite 操作資料庫的封裝

4、 對一些常用控制項如下拉重新整理 pounpwindow等其他控制項的一些整合【此部分有些是可以參考別人的】

5、........ 

下面看一下我0.1版本實現的對Handler+Thread的封裝 原始碼及範例程式碼面給出核心的代碼

封裝了一個ICallbackObject主要起中間橋樑作用

 

其中最主要的是HandlerUtil這個類 。故貼出核心代碼

package com.coder.framework.handler;import java.io.Serializable;import java.util.Map;import java.util.concurrent.Executor;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import com.coder.framework.model.ICallbackObject;import android.app.ProgressDialog;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.provider.UserDictionary.Words;import android.view.View;/** * Handler + Thread 實現的一些封裝工具類 *  * @author coder *  */public class HandlerUtil {// Handler對象private static final Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {ICallbackObject callbackObject = (ICallbackObject) msg.obj;ICallbackListener callbackListener = callbackObject.getCallbackListener();ProgressDialog progressDialog = callbackObject.getProgressDialog();View progressView = callbackObject.getProgressView();if (null != progressDialog) {progressDialog.dismiss();}if (null != progressView) {if (progressView.getVisibility() == View.VISIBLE) {progressView.setVisibility(View.INVISIBLE);}}if (null != callbackListener) {callbackListener.callBack(msg.what, callbackObject.getResult());}};};/** *  * @param taskId  執行的任務ID標識 * @param iCallbackObject ICallbackObject對象 */public static <T> void execute(final int taskId,final ICallbackObject<T> iCallbackObject) {if (null != iCallbackObject.getProgressDialog()) {iCallbackObject.getProgressDialog().show();}if (null != iCallbackObject.getProgressView()) {if (iCallbackObject.getProgressView().getVisibility() == View.INVISIBLE) {iCallbackObject.getProgressView().setVisibility(View.VISIBLE);}}new Thread() {public void run() {Message msg = handler.obtainMessage();msg.what = taskId;T result = iCallbackObject.getGetDataListener().getData(taskId);//設定返回結果iCallbackObject.setResult(result);msg.obj = iCallbackObject;handler.sendMessage(msg);}}.start();}}

引用樣本:

package com.coder.framework;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.coder.framework.R;import com.coder.framework.base.BaseActivity;import com.coder.framework.handler.ICallbackListener;import com.coder.framework.handler.IGetDataListener;import com.coder.framework.model.ICallbackObject;import com.coder.framework.util.ProgressDialogUtil;/** * 範例程式碼 * @author coder * */public class CoderFrameworkDemo extends BaseActivity implementsIGetDataListener<List<UserInfo>>, ICallbackListener<List<UserInfo>> {private View contentView;private Button btn_getData01, btn_getData02;private TextView tv_result01, tv_result02;private ICallbackObject callbackObject1, callbackObject2;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentLayout(R.layout.main);contentView = getLyContentView();btn_getData01 = (Button) contentView.findViewById(R.id.btn_getdata01);btn_getData02 = (Button) contentView.findViewById(R.id.btn_getdata02);tv_result01 = (TextView) contentView.findViewById(R.id.tv_result01);tv_result02 = (TextView) contentView.findViewById(R.id.tv_result02);callbackObject1 = new ICallbackObject(this, this, getProgressView());callbackObject2 = new ICallbackObject(this, this,ProgressDialogUtil.getProgressDialog(this, "正在載入資料"));btn_getData01.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {doAsync(1, callbackObject2);}});btn_getData02.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {doAsync(2, callbackObject1);}});}@Overridepublic void callBack(int taskId, List<UserInfo> result) {switch (taskId) {case 1:StringBuilder sb=new StringBuilder();for (UserInfo item : result) {Log.i("coder", item.toString());sb.append(item.getUserName());}tv_result01.setText(sb.toString());break;case 2: {StringBuilder sb2=new StringBuilder();for (UserInfo item : result) {Log.i("coder", item.toString());sb2.append(item.getUserName());}tv_result02.setText(sb2.toString());break;}default:break;}}@Overridepublic List<UserInfo> getData(int taskId) {try {Thread.sleep(5000);} catch (Exception e) {// TODO: handle exception}List<UserInfo> result = new ArrayList<UserInfo>();switch (taskId) {case 1: {for (int i = 0; i < 4; i++) {result.add(new UserInfo("11111111" , i));}break;}case 2: {for (int i = 0; i < 4; i++) {result.add(new UserInfo("2222222" , i));}break;}default:break;}return result;}}

實現的引用效果:

    

 以上代碼希望能給大家在開發過程中能帶來些方便,至少不用再重複的去newThread new Hadler啦,哪怕是少寫一行代碼這也是有進步的,菜鳥路上一起加油,希望更多的人能加入這樣的一個貢獻中來。

最後附上原始碼,感興趣的人可以加入到這個計劃中來,奉獻你的原始碼,讓我們一起把這個開源計劃做下去!以上代碼我自知個人能力有限,有寫得不好的地方請大家別吐槽,我們正在一步一步的成長!

項目 託管在google code,後期會放在github。

項目地址:http://code.google.com/p/coderframework/

 

API DOC文檔:

 有願意加入到這個項目中來的,或者願意分享自己代碼的同志們都可以加我Q  QQ:810417397

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.