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

在多人开发中,总想说把一个模块写得尽量高内聚,尽量功能模块化,而与其他的功能之家的耦合度尽量的低。所以就花了点时间自己写了个类似的事件总线的框架,当然还有很多不足。请到我的顺便把源码发上来,大家可以帮忙一起修改。 

 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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重播

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值