背景介紹
出于對(duì)技術(shù)的熱忱,一直再研究筆記類和清單類應(yīng)用,希望可以打造一個(gè)類似的應(yīng)用.筆記類應(yīng)用和其他應(yīng)用有一個(gè)很大的不同,數(shù)據(jù)會(huì)涉及到多端同步(一般app每次直接從服務(wù)器獲取數(shù)據(jù),不在本地保存數(shù)據(jù)). 當(dāng)某個(gè)設(shè)備上,數(shù)據(jù)發(fā)生變更后,就需要同步到服務(wù)器.當(dāng)服務(wù)器上有數(shù)據(jù)變更后,其他設(shè)備就應(yīng)該在合適的時(shí)機(jī)把數(shù)據(jù)同步下來. 這種機(jī)制適用于一大類應(yīng)用,而不止局限于筆記app,如網(wǎng)盤app也類似,只是具體同步的數(shù)據(jù)結(jié)構(gòu)存在差異.
在研究實(shí)現(xiàn)方案的過程中,幫助最大是印象筆記開放同步方案和Leanote開發(fā)實(shí)現(xiàn)源碼.
整體方案簡(jiǎn)述
每個(gè)用戶上記錄一個(gè)userMaxUsn;每條用戶數(shù)據(jù)都有一個(gè)usn,每次數(shù)據(jù)變更,就把用戶上的userMaxUsn加1,然后將此值作為該條數(shù)據(jù)的usn.客戶端通過usn比較,判斷本地和服務(wù)器的數(shù)據(jù),到底哪個(gè)新,如果服務(wù)器新,就下載更新.
客戶端實(shí)現(xiàn)方案詳述
- 同步時(shí)機(jī)
1). 啟動(dòng)app進(jìn)行一次同步
2). 每次變更本地筆記,進(jìn)行一次同步
3). 每次刷新,進(jìn)行一次同步 -
同步流程詳圖
- 主要技術(shù)點(diǎn)
Coroutines妨托、ViewModel构哺、LiveData、Retrofit、Paging寝蹈、Room
源代碼
https://gitee.com/hspbc/cloudNote/tree/master/client