[回忆篇]Android离线操作的一点

转自CSDN,5年前写的第一篇技术类的文章,当时还是个小菜鸟,一转眼5年过去了

当时从知乎摘抄的别人的励志故事,激励工作不久略失意的自己(工作缺少激情),开始利用下班时间自学android开发、iOS开发、Python开发。。。

职业方向有点迷茫,就都在学。

幸运的是,公司下班较早5点多就下班了,租住在人大附近,一下班就蹭人大的自习室学习,有时蹭女友的图书馆卡去借书看。

那段日子还是挺充实的,想想现在,基本没有自己的时间,唉。。。

当时做离线逻辑时的想法

https://blog.csdn.net/webgeek/article/details/17124159

----------------------------------------------------------------------说正事分割线------------------------------------------------------------------------------------

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

记得在上家公司,曾经遇到类似的问题:自己当时做过几个月的数据清洗工作,因为服务器资源稀缺,自己也比较懒,常常会写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 暂时不写了

你可能感兴趣的:([回忆篇]Android离线操作的一点)