安卓 app 同步功能实现原理

344 天前
 0xTSO
测试了一下滴答清单 app ,
断网情况下功能依然能正常使用,
下次连接网络之后可以继续同步,
请问下如果用 jetpack compose 实现类似的功能,
大概思路是怎样的?
盲猜:
- room 本地维护一份 database
- 断网时 room 本地更新 database
- 再次获取网络,同步本地 database 数据到云端

有安卓大佬分享一下具体的思路逻辑,
想少走些弯路,
感谢🙏
7461 次点击
所在节点    Android
5 条回复
nashaofu
344 天前
关键词 crdt.最近也在了解这一块,yjs 这个库在网页端有实现 crdt
Maboroshii
344 天前
看一下 obsidian 的那个 webdav 同步插件吧,里面有介绍他们的同步算法。
horizon
344 天前
如果只有一个端,你这种是可行的。直接覆盖式更新。
如果有多个端,就需要协同算法 OT 或者 CRDT 了
kuanat
344 天前
先需要弄清楚几个概念:

- jetpack compose 重点是 ui 和本地数据状态的同步
- 安卓 app 的同步指的是多客户端以及服务器之间数据副本的同步
- 断网可用这个特性一般用 local first 来描述

你的问题是 local first 实现方式,和用不用 jetpack compose 与是不是安卓没有关系。

这个问题的答案和业务逻辑强相关,没有普适的模式。楼上提到的 OT/CRDT 适合于多人同时编辑文档的场景,并不适合 local first 意义上的同步。

另外你举例的 app 可能在多端同步实现上没有想象中那么好。
janus77
343 天前
你说的基本就是客户端做的事
客户端所谓的同步,只负责把数据上传到云端,至于多端的情况下云端怎么合并,更新哪部分舍弃哪部分,那是云端自己用算法做,然后客户端只负责获取合并后的结果就可以。你如果是做客户端开发,是不需要关心这部分的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX