android高内聚低耦合任务事件总线框架
来源:互联网 发布:淘宝上付费引流的软件 编辑:程序博客网 时间:2024/05/23 14:23
在多人开发中,总想说把一个模块写得尽量高内聚,尽量功能模块化,而与其他的功能之家的耦合度尽量的低。所以就花了点时间自己写了个类似的事件总线的框架,当然还有很多不足。请到我的顺便把源码发上来,大家可以帮忙一起修改。
TaskManager.java 对任务进行队列管理
TaskManager.java 对任务进行队列管理
public class TaskManager {
private static int NUMBER_OF_CORES = Runtime.getRuntime()
.availableProcessors();
private static TaskManager taskManager;
private static ThreadPoolExecutor mDecodeThreadPool;
// 设置一个线程可闲置的时间
private static final int KEEP_ALIVE_TIME = 1;
// 设置一个线程可闲置的时间的单位
private static final TimeUnit KEEP_ALIVE_TIME_UNIT = TimeUnit.SECONDS;
// 声明一个任务队列
private BlockingQueue<Runnable> mDecodeWorkQueue;
public static TaskManager getTaskManager() {
if (null == taskManager) {
taskManager = new TaskManager();
}
return taskManager;
}
public int getQueueSise() {
if (null != mDecodeWorkQueue) {
return mDecodeWorkQueue.size();
}
return 0;
}
public TaskManager() {
mDecodeWorkQueue = new LinkedBlockingQueue<Runnable>();
mDecodeThreadPool = new ThreadPoolExecutor(NUMBER_OF_CORES, // 线程池的初始线程数量
NUMBER_OF_CORES, // 线程池的最大线程数量
KEEP_ALIVE_TIME, KEEP_ALIVE_TIME_UNIT, mDecodeWorkQueue);
}
public synchronized void addTask(FerrisTaskRunble task) throws NullPointerException{
try {
if (null == mDecodeWorkQueue) {
mDecodeWorkQueue = new LinkedBlockingQueue<Runnable>();
}
if (task != null) {
if (mDecodeWorkQueue.size() <= 600) {
mDecodeWorkQueue.add(task);
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
// 完成任务后将它从任务队列中删除
public synchronized void finishTask(FerrisTaskRunble task) throws NullPointerException{
try {
if (null == mDecodeWorkQueue) {
return;
}
if (task != null) {
mDecodeWorkQueue.remove(task);
}
} catch (Exception e) {
// TODO: handle exception
}
}
// 取得一项待执行任务
public synchronized void goTaskManager() throws NullPointerException {
try {
if (null == mDecodeWorkQueue) {
mDecodeWorkQueue = new LinkedBlockingQueue<Runnable>();
}
FerrisTaskRunble task = null;
if (!mDecodeWorkQueue.isEmpty()) {
task = (FerrisTaskRunble) mDecodeWorkQueue.poll();// 执行完任务后把改任务从任务队列中移除
if (null != task) {
mDecodeThreadPool.execute(task);
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
package com.ferris.sync;
public class FerrisTaskRunble implements Runnable {
private RequestVo requestVo;
public FerrisTaskRunble(RequestVo requestVo) {
this.requestVo = requestVo;
}
@Override
public void run() throws NullPointerException {
// TODO Auto-generated method stub
if (requestVo != null) {
Object tempobject = requestVo.taskParamBase.getParam(requestVo);
if (tempobject != null) {
if (requestVo.ferrisTaskListemer instanceof FerrisTaskListemer
&& requestVo.ferrisTaskListemer != null) {
requestVo.ferrisTaskListemer.updata(tempobject);
}
}
}
}
}
RequestVo.java 请求内容的对象 可以将
上下文
事件的ID
请求数据
以及事物处理的类
结果监听(在UI线程进行回调)
public class RequestVo {
public Context context;//上下文
public int event; //请求的事件
public Object requestData; //请求的数据
public TaskParamBase<?> taskParamBase; //事务处理
public FerrisTaskListemer ferrisTaskListemer; //结果监听
public RequestVo(){
}
public RequestVo(int event,Context context,Object requestData,TaskParamBase<?> taskParamBase,FerrisTaskListemer ferrisTaskListemer){
this.context=context;
this. event=event;
this.requestData=requestData;
this.taskParamBase=taskParamBase;
this. ferrisTaskListemer=ferrisTaskListemer;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public int getEvent() {
return event;
}
public void setEvent(int event) {
this.event = event;
}
public Object getRequestData() {
return requestData;
}
public void setRequestData(Object requestData) {
this.requestData = requestData;
}
public TaskParamBase<?> getTaskParamBase() {
return taskParamBase;
}
public void setTaskParamBase(TaskParamBase<?> taskParamBase) {
this.taskParamBase = taskParamBase;
}
public FerrisTaskListemer getFerrisTaskListemer() {
return ferrisTaskListemer;
}
public void setFerrisTaskListemer(FerrisTaskListemer ferrisTaskListemer) {
this.ferrisTaskListemer = ferrisTaskListemer;
}
}
其他代码请自己看。。。。。
MainActivity.java UI主线程 调用。
public class MainActivity extends Activity {
private FerrisTaskRunble ferrisTask;
private TaskManager mTaskManager;
private TextView textView1;
private int cout=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTaskManager=TaskManager.getTaskManager();
textView1=(TextView)findViewById(R.id.textView1);
for(int i=0;i<5000;i++){
//在UI主线程 新建请求任务,
RequestVo requestVo=new RequestVo(1,this,"mytest"+cout,new MainTask(),new mTaskListem());
ferrisTask=new FerrisTaskRunble(requestVo); //参数传入
mTaskManager.addTask(ferrisTask); //添加任务
requestVo=null;
cout+=1;
}
mTaskManager.goTaskManager(); //开始执行任务(可以多次调用,只返回一个实例)
}
/**
* 监听任务回调结果,更新UI
* @ferris Administrator
*
*/
public class mTaskListem implements FerrisTaskListemer{
@Override
public synchronized void updata(Object object) {
// TODO Auto-generated method stub
textView1.setText((String)object);
}
}
}
MainTask.java 这个是我们的执行耗时的类,在线程中。
package com.ferris.thingsbus;
import com.ferris.sync.RequestVo;
import com.ferris.sync.TaskParamBase;
public class MainTask extends TaskParamBase<Object> {
@Override
public Object getParam(RequestVo requestVo) {
// TODO Auto-generated method stub
return requestVo.requestData; //这里可以进行耗时操作,访问网络请求数据等。 return结果将会更新到UI层
}
}
0 0
- android高内聚低耦合任务事件总线框架
- AndroidEventBus,android事件总线框架
- Android常用框架----事件总线系列框架
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android事件总线 ( AndroidEventBus ) 框架学习
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android事件总线框架Otto使用
- Android事件总线框架之AndroidEventBus
- Android事件总线 ( AndroidEventBus ) 框架发布
- Android 事件总线Otto框架详解二
- Android事件总线 Otto框架使用
- Android事件总线 ( AndroidEventBus ) 框架发布
- 浅谈Android事件总线框架EventBus
- Android 认识EventBus轻量级事件总线框架
- 事件总线框架---Otto
- 2014年9月1日 明星吸毒的背后
- 机房收费系统——组合查询
- 基础正则表达式
- 你若离去,我自飘零
- Ubunbu下设置远程连接
- android高内聚低耦合任务事件总线框架
- 显式调用构造函数及临时对象
- 【OC学习-24】实例:创建一个文件并连续写入10次当前时间——巩固文件操作和熟悉定时器操作
- jndi练习
- 精通正则表达式(正则引擎)
- Characters in Regex expression
- Sort List
- c# 播放mp3
- LeetCode-Sort Colors