Android离线操作的一点

本文探讨了如何使用算法解决不同设备在离线状态下进行操作时产生的冲突问题,通过本地队列和服务器数据库标记来实现冲突检测与解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    昨天公司开发图书应用的同事们,在讨论多端离线操作,协同同步的问题。

记得在上家公司,曾经遇到类似的问题:自己当时做过几个月的数据清洗工作,因为服务器资源稀缺,自己也比较懒,常常会写n多行的sql脚本,再一起运行,在运行之前要先人工检查是否有可能conflict发生。如此便有了思路:大脑的人工思维过程用算法表示出来就是了。。

   思路如下:

  场景搭建:

  1,A手机在6点进行了5次离线操作(增删改 whatever)

  2,B手机在7点进行了5次离线操作(增删改 whatever)

  3,A手机又在8点进行了5次离线操作(增删改 whatever)

  4,C手机在9点进行了5次离线操作(增删改 whatever)

 其实还可以往下持续的写,某个菜鸟土豪有n多移动终端在n多时间点进行n多离线操作,埋了n多个遥控bomb(一个终端对应一个),之后的引线便是online操作

  条件假设:

 1,每个手机上该应用,在进行离线操作时,都会把 每一次操作记录下来,并标记flag,例如 添加flag为1,删除flag为-1,修改flag为0,对于查找请直接无视吧(解决local conflict)

      解决local conflict:

      每次操作语句(特殊加工之后)都记录下来(select操作可以不计入)到本地operQueue表(操作名,对象名,对象ID.....),每添加一条都与表中对比(根据 对比选择是继续添加,还是拒绝,暂时不考虑 覆盖吧,虽然可以时间但比较麻烦点),对比显然是关键,如果是insert操作基本可以无视,但如果是插入的对象在operQueue中的对象ID中存在就拒绝,不存在就放行;如果是delete操作,如果ID存在,那么就覆盖原先(这里可以提醒土豪,让他选择),无 则放行,update操作基本放行,除了发现有相同ID的delete操作,那么就拒绝。当然还有一个关键是,当同步后清空本地表。

 2,服务器数据库中添加字段flag(默认为空),和timestamp,同步 添加flag为1,同步 删除flag为-1,同步 修改flag为0(解决多终端conflict)关键是我们不删除而是标记删除符号。

     解决多终端conflict:

     离线同步都会记录下来,神马操作flag也会计入 

     conflict vs hexie

     1)某个手机delete了,另一个离线操作还有update 

     2)某个手机delete了,另一个离线操作还有delete

     3)某个手机insert了,另一个还有insert

    因为我们的删除不是真的删除,找到带有删除flag的,就提醒用户该记录已被另一部终端给删除了,所以上面的conflict都能很容易解决是否接受或拒绝其他终端的离线同步操作

    

  高潮来了:

  1,在9:30,土豪用C手机online登录,然后又用B手机登录,又用A登录

      联网事件触发。。。。。。。还有修改android bug 暂时不写了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值