android高内聚低耦合任务事件总线框架

来源:互联网 发布:淘宝上付费引流的软件 编辑:程序博客网 时间:2024/05/23 14:23
在多人开发中,总想说把一个模块写得尽量高内聚,尽量功能模块化,而与其他的功能之家的耦合度尽量的低。所以就花了点时间自己写了个类似的事件总线的框架,当然还有很多不足。请到我的顺便把源码发上来,大家可以帮忙一起修改。 

 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
        }
    }
}
 
 FerrisTaskRunble.java 请求的任务

 
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
原创粉丝点击