本文的合集已經(jīng)編著成書握巢,高級Android開發(fā)強化實戰(zhàn),歡迎各位讀友的建議和指導(dǎo)汁雷。在京東即可購買:https://item.jd.com/12385680.html
計步器作為算法功能模塊, 與業(yè)務(wù)模塊分離, 解耦合. 這樣也可以更加專注于算法的升級. 最新功能, 具體參考線上產(chǎn)品: 春雨醫(yī)生, 春雨計步器. 我來簡述一下計步器算法的實現(xiàn)原理, 給大家一些啟發(fā).
1. 算法
對于所有計步器而言, 早期必然是使用加速度傳感器(Accelerometer Sensor)測量步數(shù), 隨后谷歌推出計步傳感器(Step Counter Sensor), 由硬件或系統(tǒng)計算步數(shù)的變化, 使得算法簡化. 有些手機, 未提供計步傳感器; 有些手機, 在待機過程中關(guān)閉計步傳感器.
簡單介紹一下算法原理:
-
加速度傳感器(Accelerometer Sensor):
算法根據(jù)加速度傳感器空間位置(XYZ軸)的變化, 繪制空間曲線, 根據(jù)兩次波峰波谷之間的時間間隔, 判斷步行或其他狀態(tài). 在短時間內(nèi)出現(xiàn)連續(xù)波峰, 即為步行; 波峰出現(xiàn)的時間間隔較長, 則認(rèn)為停止行走. 同時, 屏蔽輕微與初始擾動, 提升準(zhǔn)確性; 通過調(diào)整參數(shù), 適配不同手機的傳感器差異, 提升魯棒性. -
計步傳感器(Step Counter Sensor):
算法讀取計步傳感器的數(shù)值, 與本地緩存數(shù)值匹配, 判斷步數(shù)的增加與否. 在屏幕關(guān)閉時, 啟動BatchMode模式, 配合協(xié)處理器, 延遲獲取數(shù)值, 節(jié)約電量. 當(dāng)計步傳感器停止時(有些手機在屏幕關(guān)閉時會停止部分傳感器), 自適應(yīng)切換加速度傳感器, 啟動時, 再次切換計步傳感器. -
自適應(yīng)性(Self-Adaption):
根據(jù)系統(tǒng)狀態(tài), 優(yōu)先選擇計步傳感器, 當(dāng)計步傳感器無法使用時, 選擇加速度傳感器.
關(guān)于服務(wù)弊罱活:
- 計步服務(wù)單獨使用一個進(jìn)程, 保證內(nèi)存較少, 低優(yōu)先級被殺死.
- 設(shè)置AlarmManager定時器, 定時檢測服務(wù)狀態(tài), 啟動服務(wù).
- 接收常規(guī)系統(tǒng)廣播, 如網(wǎng)絡(luò), 電量, 充電等, 檢查并啟動服務(wù).
- 將服務(wù)設(shè)置為前臺服務(wù), 提高進(jìn)程優(yōu)先級, 避免殺死.
關(guān)于反作弊:
已經(jīng)根據(jù)手機狀態(tài), 添加反作弊功能, 防止惡意刷步.
關(guān)于省電:
在服務(wù)中已經(jīng)使用多種電量優(yōu)化措施, 內(nèi)部測試, 電量消耗遠(yuǎn)低于競品.
提供開關(guān), 自行控制喚醒鎖, 默認(rèn)不使用喚醒鎖.
2. 示例
計步算法與服務(wù)已經(jīng)集成至獨立Maven庫或AAR庫, 使用Intent發(fā)送計算后的數(shù)據(jù)(步數(shù)與運動時間), 供主App使用和展示.
3. 模塊
算法庫使用模塊化開發(fā).
4. 合作
本算法目前僅在公司內(nèi)部使用, 如需合作, 直接站內(nèi)私信我.
OK, That's all. Enjoy it!