本地缓存

little_fat_sheep
Unity3D领域新星创作者
博客专家认证
2018-12-23 12:52:44
最近在开发一款游戏——基于Android的数字华容道。然而,有个问题却困扰了我近半个月:如何实现本地缓存。我一直在想,如何能像QQ、微信一样,在断网的情况下,也能运行APP,并获得部分信息。直到今天才基本解决这些疑惑。在这里,和大家分享一下我的经验。

本地缓存是什么?我的理解是:把部分数据保存在本地,以便快速获取数据,以及在断网的情况下,能够保证APP的安全稳定运行。

本地缓存到底要实现什么?经过半个月的摸索,逐渐弄清楚本地缓存要做些啥:

1.如何在断网的情况下,用户能够登录某个账号玩游戏,待有网的时候再把数据传送到服务端。(即如何处理本地数据比远程数据多的情况)

2.用户在连网的情况下,玩了几局游戏(本地和远程都正常保存了数据),然后用户又把游戏卸载了(远程数据还在),某天该用户又重新下载了该游戏,并用之前的账号登录,用户正想查看战绩,正巧又断网了,然后就看到一片空白,怎么办?(即如何处理远程数据比本地多的情况)

针对问题1,从两个角度解决该问题:防止部分本地数据比远程数据多、将部分本地数据在有网的时候传送到服务端。

①防止部分本地数据比远程多。比如注册新账号,绝对不允许在断网的时候注册。

②将部分本地数据在有网的时候传送到服务端。用户在玩完一局游戏后,就会产生新的数据。有网时,本地和远程都正常保存了数据;没网时,只有本地保存了数据,此时可以将要发送到服务端的插入一条记录的SQL语句保存起来,比如放在not_executed_sql表中sql属性里,待有网时,再把该语句发送到服务端执行,并从本地not_executed_sql表中删除该语句。那么,有网时,又在什么时候去发送这些未执行的SQL语句呢?我的想法是在页面跳转的时候实现,即在onCreate()和onRestart()方法中实现。

针对问题2,也从两个角度解决该问题:防止部分远程数据比本地数据多、将部分远程数据在有网的时候传送到本地保存。

        ①防止部分远程数据比本地数据多。比如用户第一次登录,绝对不允许用户在断网的时候登录。用户登录一次后,其基本信息也顺便copy到本地了,以后就可以在段网的时候也能顺利登录进去玩游戏了。

        ②将部分远程数据在有网的时候传送到本地保存。比如用户第一次登录时,用户的战绩放在了6个表中(jie3、jie4、jie5、m_jie3、m_jie4、m_jie5),并且数据量比较大,不方便copy到本地,而用户只想知道自己的历史记录,因此只需将最佳战绩copy到本地。这样用户以后在断网的时候也能查看到最佳战绩了。

说明:此项目运用SQL Server作为远程服务器,Tomcat作为Web服务器,SQLite作为本地缓存。
...全文
105 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧