博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hybrid使用localStorage储存数据不靠谱!
阅读量:6801 次
发布时间:2019-06-26

本文共 2011 字,大约阅读时间需要 6 分钟。

hot3.png

 在Hybrid做App,需要保存一些数据在本地,一般会使用HTML5的特性localStorage和sessionStorage,具体的介绍请看;本文的重点不在于介绍localStorage,而是通过我的遭遇侧重描述为什么HybridApp的数据存储在localStorage不靠谱...

    我先来描述一下场景,我是负责用HTML5也就是Hybrid做Ios开发的,在9月底,最近发布了一个新版本后,陆陆续续发现有几个使用ios用户告知的一个现象,说每次使用APP都需要重新登录!用户的描述是,登录以后,当天杀掉进程是不会再使用App是不用重新登录的,但是过几天以后,再使用App就会要重新登录;

    在定位问题的时候,我通常会要按照以下几个步骤:

        1.出现该bug的用户是大面积的群体还是个别几个:

                群体性:很大可能是代码问题,或者服务器问题,因为使用的是同一个app,同一个服务器接口或者同一个服务器的访问地址;

                个别几个:很可能与用户的行为,场景有关,在某些特别的时候,就会触发app出现某个bug;

        2.出现该bug的用户是否存在类似相似的地方:如果存在相似的地方,那就模仿用户的操作,或者模拟用户的场景,尽量复现问题;

        3.出现该问题的逻辑:检查这块逻辑代码,是否存在出现问题的可能,调试与模仿用户的操作;

    首先,这个“重新登录”的问题不是群发性的因为这几位用户分布在全球,并且这个问题,我们按照用户的操作在测试手机上怎么测试都没有复现;第二,这个问题出现是个别几个不一样的用户,都是普遍的登录操作,没有任何移异常的地方;第三,我十分明确我代码“登录”这块逻辑的数据存储是保存在localStorage上的,在启动app的时候去检查localStorage是否存在用户登录的数据,如果不存在,则重新登录,并且在日志中,我发现不单单是登录数据被清除,是所有存储在localStorage都没有了;

    综上所述,我基本能得到一个初步结果:在某些特定的情况下,localStorage被清除了!

    为了进一步确定某些特定的情况下,我想象过许多可能性

        1.由于app9月底发布新版本的时候,apple公司刚刚发布ios10,并且在app日志中能明显发现的是,出现该问题的大部分是ios10的用户!并且在google中也能发现类似的言论!,难道与ios10系统有关?直到我发现一位用户用的是Ios8,我才彻底推翻这个想法;

        2.是不是我代码中,调用了localStorage.clear()方法,强制的清空了所有内存?然后我搜索的所有代码,并没有!

        3.是不是手机启用的app太多,导致系统内存(RAM)不足,然后强制清除了呢?为了实现这个想法,我在手机中安装了好几个大型游戏,把手机都玩得烫的不要不要的,也没有出现;

        在纠结了半天后,在google得到了一个重大发现, ;这篇文章中,描述了,在ios8中,当系统空间不足的时候,系统会清除localStorage中的数据!

        得知这个消息后,我马上安排测试的小伙伴去测试,先登录app,然后多下点应用,把空间使用完;

        然后我打电话咨询了两位客户,得到的消息是,这两位客户,手机空间经常不足,最直观的表现是微信经常提醒要清理空间,他们用的都是16G的Iphone手机!打完电话回到座位,测试的小伙伴兴奋的说,复现了复现了,当内存不足的时候,系统那里会出现个什么正在清除数据...然后,打开app后,就发现数据被清空了;所以,出现问题的原因是,当系统存储空间不足时,会触发系统级别的清理,并且清除的对象,就有localStorage;

        这就是这个奇妙之旅。所以,localStorage存储数据,在ios中确实不靠谱!在ios系统中这个localStoreage不是一种持久化的数据!虽然这个不是app引发的问题,但是,这个问题还是得解决!后面如果找到了解决方案,再一篇文章做做记录呗....

        另外,本文仅描述ios,在找资料的同时,也相关的资料说,localStorage在Android同样不靠谱,但是我没实测,具体请看 ;

 

资料:

https://forum.ionicframework.com/t/ios-localstorage-persistence/20004/17

http://gonehybrid.com/dont-assume-localstorage-will-always-work-in-your-hybrid-app/

https://forum.ionicframework.com/t/ionic-1-ios-10-local-storage-issue/63519

:  https://blog.niezw.com/post/8bf0e032.html

转载于:https://my.oschina.net/gavinnie/blog/777079

你可能感兴趣的文章
android.support.v4.view.NestedScrollingChild cannot be resolved
查看>>
PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
查看>>
java.util.ConcurrentModificationException异常参考解决方法
查看>>
Linux主机和VirtualBox虚拟机局域网互通
查看>>
SpringMVC之类型转换Converter
查看>>
mysql压力测试
查看>>
正则匹配基本用法与常用正则整理
查看>>
谈谈神秘的ES6——(五)解构赋值【对象篇】
查看>>
ios 的cookie处理机制
查看>>
[转]tar 打包目录时排除其中某一子目录的方法
查看>>
线程和进程的一个简单解释
查看>>
ThinkPHP 数据库查询是id大于等于
查看>>
Keytool 自签名证书
查看>>
linux常用命令
查看>>
jUnit测试
查看>>
[总结]-第四章 虚拟机性能监控与故障处理工具
查看>>
卡特兰数解释
查看>>
springboot linux下启动的脚本
查看>>
maven resource 记录
查看>>
cinder使用ceph,设置rbd_flatten_volume_from_snapshot的意义
查看>>