DaemonTask.javajava
package com.dqyx.wzcl.util; public abstract class DaemonTask { /** * 任務執行方法。 */ public abstract void execute(); }
DaemonTaskRunner.javaandroid
1 package com.dqyx.wzcl.util; 2 3 import java.util.LinkedList; 4 5 import android.util.Log; 6 7 public class DaemonTaskRunner implements Runnable 8 { 9 private volatile boolean runFlag = true; 10 11 /** 12 * 異步任務隊列 13 */ 14 protected LinkedList<DaemonTask> taskList = new LinkedList<DaemonTask>(); 15 16 public DaemonTaskRunner() 17 { 18 init(); 19 } 20 21 /** 22 * 初始化方法,啓動後臺異步任務管理器 23 */ 24 public void init() 25 { 26 this.runFlag = true; 27 Thread thread = new Thread(this); 28 thread.start(); 29 } 30 31 public void finish() 32 { 33 synchronized (this.taskList) 34 { 35 this.runFlag = false; 36 this.taskList.clear(); 37 this.taskList.notify(); 38 } 39 } 40 41 /** 42 * 線程執行方法,覆蓋Runnable的方法 檢查任務隊列裏面是否有任務,若是有就執行;若是沒有就進入休眠狀態。 43 */ 44 public void run() 45 { 46 while (this.runFlag) 47 { 48 // 從taskList隊尾取出任務並執行 49 try 50 { 51 DaemonTask task = null; 52 synchronized (this.taskList) 53 { 54 if (this.taskList.size() != 0) 55 { 56 task = this.taskList.removeLast(); 57 } 58 else 59 { 60 // 若是沒有任務,就休眠。 61 this.taskList.wait(); 62 } 63 } 64 if (task != null) 65 { 66 task.execute(); 67 } 68 } 69 catch (Exception e) 70 { 71 Log.e("DaemonTaskRunner", "DaemonTaskRunner get and run task failed!",e); 72 } 73 } 74 } 75 76 /** 77 * 添加一個異步任務到執行隊列 添加後喚醒執行線程 78 * 79 * @param task 80 * DaemonTask 81 */ 82 public void addTask(DaemonTask task) 83 { 84 synchronized (this.taskList) 85 { 86 this.taskList.addFirst(task); 87 this.taskList.notifyAll(); 88 } 89 } 90 }
此外還能夠將Handler與具體的excute()方法進行封裝,寫成一個 總體的框架,這裏只是實現了核心部分,將任務添加到隊列中。框架