现在的位置: 首页 > 综合 > 正文

coderFrameworkV0.1 应用开发框架 实现Handler+Thread的参数化封装

2013年08月21日 ⁄ 综合 ⁄ 共 5059字 ⁄ 字号 评论关闭

先声明一下,说什么框架其实是为了吸引一下大家,哈哈,其实只是把自己在开发过程中的代码想办法的去整合在一起,让自己以及团队成员快速的尽量的少写很多代码。先整理出第一个版本,也欢迎更多的有志之士加入这个代码重构的框架中来,我相信通过我们大家的共同努力我们一定会写出优秀高效的代码,说一下自己后期的一些目标以及这个整合的框架代码里。无论我写得是否为好,请大家不要吐槽。

此框架预计完成的封装及重构的目标是:

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 implements
		IGetDataListener<List<UserInfo>>, ICallbackListener<List<UserInfo>> {

	private View contentView;
	private Button btn_getData01, btn_getData02;
	private TextView tv_result01, tv_result02;

	private ICallbackObject callbackObject1, callbackObject2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.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() {

			@Override
			public void onClick(View v) {
				doAsync(1, callbackObject2);
			}
		});
		btn_getData02.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				doAsync(2, callbackObject1);
			}
		});

	}

	@Override
	public 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;
		}
	}

	@Override
	public 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

 

抱歉!评论已关闭.