android 线程任务管理器 管理下载任务

 1 public class DownloadTaskManagerThread implements Runnable {  
 2       
 3     private DownloadTaskManager downloadTaskManager;  
 4   
 5     // 创建一个可重用固定线程数的线程池  
 6     private ExecutorService pool;  
 7     // 线程池大小  
 8     private final int POOL_SIZE = 5;  
 9     // 轮询时间  
10     private final int SLEEP_TIME = 1000;  
11     // 是否停止  
12     private boolean isStop = false;  
13   
14     public DownloadTaskManagerThread() {  
15         downloadTaskManager = DownloadTaskManager.getInstance();  
16         pool = Executors.newFixedThreadPool(POOL_SIZE);
17     }  
18   
19     @Override  
20     public void run() {  
21         // TODO Auto-generated method stub  
22         while (!isStop) {  
23             DownloadTask downloadTask = downloadTaskManager.getDownloadTask();  
24             if (downloadTask != null) {
25                 pool.execute(downloadTask);
26                 
27             } else {  //如果当前未有downloadTask在任务队列中  
28                 try {  
29                     // 查询任务完成失败的,重新加载任务队列  
30                     // 轮询,  
31                     Thread.sleep(SLEEP_TIME);
32                 } catch (InterruptedException e) {  
33                     // TODO Auto-generated catch block  
34                     e.printStackTrace();  
35                 }  
36             }
37         }  
38         if (isStop) {  
39             pool.shutdown();  
40         }  
41   
42     }  
43   
44     /** 
45      * @param isStop 
46      *            the isStop to set 
47      */  
48     public void setStop(boolean isStop) {  
49         this.isStop = isStop;  
50     }  
51   
52 }  

 DownloadTaskManagerThread:下载任务管理器线程,对下载管理器中的任务链表进行逐个获取,进行任务执行。

 DownloadTaskManager:下载管理器,对任务集中的管理,添加、移除操作。

 1 public class DownloadTaskManager {  
 2     private static final String TAG="DownloadTaskManager";  
 3     // UI请求队列  
 4     private LinkedList<DownloadTask> downloadTasks;  
 5     // 任务不能重复  
 6     private Set<String> taskIdSet;  
 7   
 8     private static DownloadTaskManager downloadTaskMananger;  
 9   
10     private DownloadTaskManager() {  
11   
12         downloadTasks = new LinkedList<DownloadTask>();  
13         taskIdSet = new HashSet<String>();
14     }  
15   
16     public static synchronized DownloadTaskManager getInstance() {  
17         if (downloadTaskMananger == null) {  
18             downloadTaskMananger = new DownloadTaskManager();  
19         }  
20         return downloadTaskMananger;  
21     }  
22   
23     //1.先执行  
24     public void addDownloadTask(DownloadTask downloadTask) {  
25         synchronized (downloadTasks) {
26             // 增加下载任务  
27             downloadTasks.addLast(downloadTask);
28             System.out.println("下载管理器增加下载任务1个");
29         }
30     }  
31     
32     public boolean isTaskRepeat(String fileId) {  
33         synchronized (taskIdSet) {  
34             if (taskIdSet.contains(fileId)) {  
35                 return true;  
36             } else {  
37                 System.out.println("下载管理器增加下载任务:"+ fileId);  
38                 taskIdSet.add(fileId);  
39                 return false;  
40             }  
41         }  
42     }  
43       
44     public DownloadTask getDownloadTask() {
45         synchronized (downloadTasks) {
46             if (downloadTasks.size() > 0) {
47                 System.out.println("下载管理器增加下载任务:"+"取出任务");
48                 DownloadTask downloadTask = downloadTasks.poll();
49                 //taskIdSet.remove(downloadTask.getFileId());
50                 return downloadTask;
51             }
52         }
53         return null;
54     }
55     
56     public void removeField(String position){
57         taskIdSet.remove(position);
58     }
59     
60     public int getDownloadTaskSize()
61     {
62         return downloadTasks.size();
63     }
64 }  

 DownloadTask :单个的下载任务线程(具体的下载任务)

 1 /**
 2  * 任务执行线程
 3  */
 4 public class DownloadTask extends Thread {
 5     private Handler handler;
 6 
 7     /**
 8      * 初始化下载任务
 9      */
10     public DownloadTask(Context context, Handler handler, String name
11             , Map<Integer, Object> itemViews, int taskExecuteType) {
12         this.handler = handler;
13     }
14 
15     @Override
16     public void run() {
17         /** 任务开始 **/
18         Message startMsg = new Message();
19         startMsg.what = ActionCode.TEST_START;
20         startMsg.obj = itemViewsMap;
21         startMsg.arg1 = taskExecuteType;
22         handler.sendMessage(startMsg);
23     }
24 
25     public String getFileId() {
26         return name;
27     }
28 }

 调用:添加下载任务到管理器,由管理器进行逐个执行。

1 // 1.new 一个线程管理类
2         downloadTaskMananger = DownloadTaskManager.getInstance();
3         // 2.new一个线程池,并启动
4         DownloadTaskManagerThread downloadTaskManagerThread = new DownloadTaskManagerThread();
5         new Thread(downloadTaskManagerThread).start();

 

posted @ 2015-06-26 15:54  晕菜一员  阅读(535)  评论(0编辑  收藏  举报