Android 在線訂單倒計時設計


    接到一個需求,用戶下單后,商店這邊需要顯示在線訂單列表,訂單十分鍾內有效。於是需要設計倒計時,顯示每個訂單剩余處理時間。
 
     倒計時剩余時間: 訂單創建時間 + 10分鍾  - 系統當前時間
     刷新剩余時間:在ListView的adapter的getView中,根據綁定的order按照上面的公式算出時間並顯示
 
    當用戶下單后,服務器是通過推送告知商店有新的在線訂單,然后商店再去獲取最新的在線訂單列表。如果在線訂單界面來處理收到的推送,每當有新訂單的通知,就去請求服務器獲取最新列表,這樣最簡單直接。然后再寫個定時器,每秒執行ListView的notifyDataChanged來刷新倒計時,請求到數據時就將就的訂單列表clear,設置新的數據。
 
    但是,當其他的位置需要顯示在線訂單列表數量的時候,怎么處理?並且,直接寫在Activity中會導致代碼很亂,難以維護。
 
    新的想法是,創建一個獨立的計時器,每秒執行任務task,至於需要執行的task只需要實現Task接口,並且注冊到task列表中。這樣在線訂單的Activity只需要實現並注冊task,然后把需要的事情寫在task函數中就行了。
    
    至於在線訂單列表,就用一個全局的管理類來處理,初始化的時候請求一次數據,放到靜態的list中,只有收到在線訂單的通知或者主動的執行管理類的靜態函數needChange(),才會去請求后台的在線訂單列表。在線訂單Activity只需要調用管理類的getOnlineOrders()就能得到訂單列表。
 
    基本上解決了倒計時顯示,但是還是隱藏了一個問題,就是計算剩余時間。本來,大多數android設備的時間都是正常了,但是難免有些比較調皮(相差個幾年或者幾小時之類的)。這樣導致了android系統時間和訂單創建的時間(服務器時間)有一定的差距,影響了計算剩余時間公式的准確性。
 
    解決時間不准確的思路時,剛開始想直接修改系統時間,但是想想,看有沒有另外的方法。后來和后台商量,提供一個校准時間的接口,返回服務器當前時間。如果每秒都訪問,這樣設備過多時有點給服務器壓力了。設置一個計數器,當過了多少秒就請求一次,比如100或者1000之類的。另外當android系統時間與服務器時間差距在1s的時候,就選擇系統時間。(如果系統時間准確,或許可以將校准時間的頻率再低點)
 
    以上就是關於倒計時的思路了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM