react-native中有時候需要定時執行一些後台任務,比如定時傳送訊息,定時統計資料等.這個時候就需要使用另外註冊乙個檢視來做這些東西了,不然在同步任務中做這些任務,一旦任務比較耗時就會卡住後面的程序,甚至導致後面的程序不再渲染頁面.
在合適的位置:頁面啟動或者某個需要的時候,註冊並啟動我們的另外乙個檢視.這個時候其實相當於啟動了另外乙個執行緒.
這裡注意一下,這個檢視裡的東西千萬不要直接重新整理ui相關的資料,所有的內容都應該是記憶體相關的.
複製**
這裡使用react-native內部提供的requestanimationframe
方法,每次重新整理的時候先判斷一次是否可以執行任務.
const tasks = new
map();
let currdate = date.now();
/** * 初始化
*/exports.init = function ()
/** * 執行,每秒執行一次
* 保證秒級工作正確
*/function
run()
global.requestanimationframe(run);
}複製**
所有的任務都需要繼承這個基類,定時器執行的時候也會通過基類內部的方法去判斷是否需要執行方法.這裡對外實現了乙個timer是時間間隔,單位是毫秒,還有乙個start方法用來給每個任務使用的.
通過每次執行prestart方法判斷下次執行的時間到了沒有來決定是否執行自定義方法.如果到了同時還要計算下一次的時間並存好.
/**
* 基礎工作類
*/class
jobs
/*** 過載:執行一次設定的方法
*/start()
}複製**
將設定好的任務加入全域性的map示例中,執行的時候會從這個示例中取需要的任務出來.
/**
* 新增乙個工作
* @param name 名稱
* @param time 時間
* @param fn 執行函式
*/const addjob = (name, job) => tasks.set(name, new job())
exports.addjob = addjob;
/** * 取消任務
* @param name
*/const canceljob = name => tasks.delete(name);
exports.canceljob = canceljob;
複製**
這裡模擬一次定時傳送統計訊息.
另外乙個地方實現了將每次需要傳送的訊息存入記憶體中,這裡只負責取出需要傳送的訊息.
設定3秒執行一次傳送任務,如果數量比較少就修改定時任務的間隔,後面的任務延遲傳送.
如果後台接收一次大量的資料,也可以將多次統計合併為一次統計,請求的個數會更少一些.
/**
* 定時觸發統計方法
*/class
trackjob
extends
jobs
else
list.foreach(item => )
}}addjob("track", trackjob);
複製**
加入執行次數,執行超過一定的此時就不再執行. linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...
at定時任務
at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...
at定時任務
1 at是只執行一次,執行完後任務刪除。at的守護程序atd會以後臺模式執行,檢查作業佇列來執行。2 預設 atd每60秒巡邏一次,有作業時候,檢查作業時間,如果和當前時間一樣,就執行任務 3 在使用at命令的時候,一定要保證他的守護者atd程序的啟動。用ps ef grep atd來檢視atd是否...