一养交、時(shí)長統(tǒng)計(jì)框架
怎樣設(shè)計(jì)一個(gè)時(shí)長統(tǒng)計(jì)框架抓狭?
記錄器
基于不同的場景提供關(guān)于記錄的封裝枚抵、適配线欲。一般分為頁面式,流式汽摹,自定義式李丰。
記錄管理者
管理統(tǒng)計(jì)記錄數(shù)據(jù),包含記錄緩存逼泣,磁盤存儲(chǔ)趴泌,上傳器。
如何降低數(shù)據(jù)的丟失率拉庶?
兩種解決方案:
- 定期寫入磁盤
- 每當(dāng)記錄條數(shù)達(dá)到某個(gè)值的時(shí)候嗜憔,寫入到磁盤
記錄上傳的時(shí)機(jī)
- 前后臺(tái)切換的時(shí)候上傳
- 從無網(wǎng)到有網(wǎng)切換的時(shí)候上傳
上傳時(shí)機(jī)的選擇
- 立即上傳
- 定時(shí)上傳
- 延時(shí)上傳
二、復(fù)雜頁面架構(gòu)設(shè)計(jì)案例
從三個(gè)方面分析架構(gòu)設(shè)計(jì):整體架構(gòu)氏仗、數(shù)據(jù)流吉捶、反向更新。
2.1 整體架構(gòu)
2.1.1 視圖層(View&ViewController)
View
的功能包含:控件的初始化皆尔、設(shè)置數(shù)據(jù)呐舔、交互事件代理等。
ViewController
的功能:視圖創(chuàng)建與組合慷蠕、協(xié)調(diào)邏輯珊拼、事件回調(diào)處理等,事件回調(diào)處理指的是視圖層的事件流炕。
2.1.2 業(yè)務(wù)邏輯層(ViewModel)
業(yè)務(wù)邏輯處理(預(yù)排版)澎现、數(shù)據(jù)增刪改查封裝者、線程安全處理每辟。
2.1.3 數(shù)據(jù)層 (Engine & Model)
網(wǎng)絡(luò)請求昔头、數(shù)據(jù)解析、增刪改查影兽、本地處理邏輯(適配)
2.2 數(shù)據(jù)流
數(shù)據(jù)流包含:網(wǎng)絡(luò)數(shù)據(jù)揭斧、業(yè)務(wù)數(shù)據(jù)、UI數(shù)據(jù)三部分峻堰。
網(wǎng)絡(luò)數(shù)據(jù)經(jīng)過Engine
層處理加工產(chǎn)生業(yè)務(wù)數(shù)據(jù)讹开,業(yè)務(wù)數(shù)據(jù)經(jīng)過ViewModel
層處理產(chǎn)生UI數(shù)據(jù),UI數(shù)據(jù)會(huì)轉(zhuǎn)交給視圖控制器控制視圖的顯示捐名。
業(yè)務(wù)數(shù)據(jù)強(qiáng)引用網(wǎng)絡(luò)數(shù)據(jù)和UI數(shù)據(jù)旦万,同時(shí)UI數(shù)據(jù)通過弱引用找到業(yè)務(wù)數(shù)據(jù)。
2.3 反向更新
用戶交互網(wǎng)絡(luò)刷新等都會(huì)導(dǎo)致視圖層變化镶蹋,通過代理方式通知視圖控制器成艘∩桶耄控制器對ViewModel的強(qiáng)引用找到對應(yīng)ViewModel,然后通過UI數(shù)據(jù)對業(yè)務(wù)數(shù)據(jù)的弱引用找到對應(yīng)的業(yè)務(wù)數(shù)據(jù)同時(shí)打上臟標(biāo)記淆两。最后ViewModel進(jìn)行數(shù)據(jù)流的重新驅(qū)動(dòng)断箫,將臟數(shù)據(jù)重新處理生成新的UI數(shù)據(jù)更新視圖。
小結(jié)
本節(jié)梳理時(shí)長統(tǒng)計(jì)實(shí)現(xiàn)原理和復(fù)雜頁面的架構(gòu)實(shí)現(xiàn)思路秋冰。