- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                Android网络业务的封装与调度
手机客户端程序由于网络宽带的约束,尤其在GPRS网络环境下,大数据量的网络交互很大程度上降低应用的响应,影响用户体验。比如,如果做一个手机网盘客户端,在后台上传文件时(大数据量的交互),获取文件列表(命令类的交互)这个过程就显得太别慢。而我们的要求是希望这些命令类操作能尽快得到响应。 
通常,在手机客户端,我们设计一个网络操作的管理器,来统一管理这些需要联网的操作。
具体做法是把网络操作封装成一个Command(或者说是Task),管理器实现特定的调度规则来调度运行这些Task。
这样做的好处至少有三:
一. 用Command封装了网络操作,使得这些操作与上传的业务分离,解除了强耦合。
二. 可以根据网络情况来确定来采用不同的调度规则,提高用户体验。
三. 重用,这些Task和TaskManager的代码在别的手机应用上基本上能照搬过去。
四.?扩展,当应用需要扩展新的业务时,只有扩展一个新的Command(或者说是Task),接受调度即可,易于扩展。
?
例子:
还是以上文提到的微盘为例,可以概括我们对管理器的设计要求有:
在Wifi网络环境下:
一:各种网络操作可以并行运行。
在GPRS网络环境下:
二:支持优先级抢占调度,命令类操作的优先级比数据传输类的优先级高,当命令类的Task(获取文件列表)提交后,打断数据传输的Task(如上传,下载),等命令类的任务运行完毕,再接着运行数据类任务(断点上传,下载)。
二:同一个优先级的任务可以并行运行,如多个命令一起在网络上传输。
?
实现思路:
TaskManager?:
1. TaskManager开辟一个后台线程进行调度工作。
2. 由于要支持多个优先级的抢占调度,我们需要两个队列来维护运行中的Task和等待中的Task。
3. 由于Task的调度是基于优先级的,我们可以使用优先级队列,运行队列采用PriorityQueue,等待队列使用PriorityBlockingQueue,当没有网络业务需要运行时,调度线程阻塞挂起,避免空转。
4.?TaskManager设计为单一实例(单一模式)。
5. 每个Task被调度运行时,该Task被从等待队列移动运行队列,当Task执行完毕时,从运行队列删除,唤醒调度线程进行新的调度。
下面是简单的设计代码:
?
public final class TaskEngine implements Runnable{
?
private PriorityQueueTask runningQueue;//运行的task队列
?
private PriorityBlockingQueueTask readyQueue;//就绪的task队列,准备接受调度的task列表
?
private final AtomicLong taskIdProducer = new AtomicLong(1);//Task Id生成器
?
private Object sheduleLock = new Object();//同步锁
?
private static TaskEngine instance;
?
public long addTask(BusinessObject bo){
  Task task = new Task(bo);
  long newTaskId = taskIdProducer.incrementAndGet();
  task.setTaskId(newTaskId);
  if(this.isWifiNetWork()){ //WIFI网络
  synchronized(sheduleLock){
  runningQueue.add(task);
  }
  new Thread(task).start();
  }else{ //GPRS网络
  if(readyQueue.offer(task)){ //task入就绪队列
  final ReentrantLock lock = this.lock;
  lock.lock();
  try{
  needSchedule.signal(); //唤醒调度线程重新调度
  }finally{
  lock.unlock();}
  }
}
return newTaskId;
}
?
public final void run(){//task调度逻辑
....
....
}
?
//挂起调度线程 当不需要调度时
private void waitUntilNeedSchedule() throws InterruptedException
{
.....
}
}
?
Task:
?
1. 对要执行的网络操作的封装。
?
2. Task
                您可能关注的文档
- 华东理工大学华昌聚合物有限公司新厂项目工艺管道安装工程施工方案.【经典资料】.doc
- 华东轻纺城二期厂房轻钢屋面工程施工方案.【经典资料】.doc
- 化学水框架主体施工方案.【经典资料】.doc
- 会昌县脐橙分选打蜡气调保鲜建设项目可行性研究报告.【经典资料】.doc
- 混凝土工程施工方案.【经典资料】.doc
- 加气混凝土砌体施工方案.【经典资料】.doc
- 加热炉施工方案.【经典资料】.doc
- 加油站改造工程施工方案.【经典资料】.doc
- 剪力墙结构施工方案.【经典资料】.doc
- 江苏某佛教建筑chf空心楼盖体系施工方案.【经典资料】.doc
- android系统概述【经典资料】.pdf
- app向何方移动 正在发生的8个转变_dcci【经典资料】.pdf
- excel使用技巧大全(超全)【经典资料】.doc
- excel在人力资源管理中的应用【经典资料】.doc
- fact无粗体pdf【经典资料】.pdf
- fbi教你读心术【经典资料】.pdf
- forecast2013中国电子商务蓝皮书-dcci简版【经典资料】.pdf
- handler+executorservice(线程池)+messagequeue模式+缓存模式【经典资料】.doc
- html5开发android应用程序概述【经典资料】.pdf
- ibm gbs智慧企业云移动解决方案【经典资料】.pdf
 原创力文档
原创力文档 
                         
                                    

文档评论(0)