V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0xTSO
V2EX  ›  Android

安卓 app 同步功能实现原理

  •  
  •   0xTSO · 2023-12-13 11:13:36 +08:00 · 8158 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。
    测试了一下滴答清单 app ,
    断网情况下功能依然能正常使用,
    下次连接网络之后可以继续同步,
    请问下如果用 jetpack compose 实现类似的功能,
    大概思路是怎样的?
    盲猜:
    - room 本地维护一份 database
    - 断网时 room 本地更新 database
    - 再次获取网络,同步本地 database 数据到云端

    有安卓大佬分享一下具体的思路逻辑,
    想少走些弯路,
    感谢🙏
    5 条回复    2023-12-14 10:05:23 +08:00
    nashaofu
        1
    nashaofu  
       2023-12-13 12:30:14 +08:00 via Android
    关键词 crdt.最近也在了解这一块,yjs 这个库在网页端有实现 crdt
    Maboroshii
        2
    Maboroshii  
       2023-12-13 12:32:27 +08:00 via Android
    看一下 obsidian 的那个 webdav 同步插件吧,里面有介绍他们的同步算法。
    horizon
        3
    horizon  
       2023-12-13 21:35:46 +08:00
    如果只有一个端,你这种是可行的。直接覆盖式更新。
    如果有多个端,就需要协同算法 OT 或者 CRDT 了
    kuanat
        4
    kuanat  
       2023-12-13 23:30:15 +08:00
    先需要弄清楚几个概念:

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

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

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

    另外你举例的 app 可能在多端同步实现上没有想象中那么好。
    janus77
        5
    janus77  
       2023-12-14 10:05:23 +08:00
    你说的基本就是客户端做的事
    客户端所谓的同步,只负责把数据上传到云端,至于多端的情况下云端怎么合并,更新哪部分舍弃哪部分,那是云端自己用算法做,然后客户端只负责获取合并后的结果就可以。你如果是做客户端开发,是不需要关心这部分的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:32 · PVG 08:32 · LAX 16:32 · JFK 19:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.