专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
复利大王  ·  好牛的幼儿园 ·  19 小时前  
复利大王  ·  老同学中捞一捞能不能找到免费P友 ·  19 小时前  
复利大王  ·  冷暴力女王,翻车了 ·  昨天  
复利大王  ·  520怀孕事件? ·  昨天  
51好读  ›  专栏  ›  郭霖

一个null引发的SharedPreferences惨案

郭霖  · 公众号  · android  · 2016-12-09 08:00

正文

请到「今天看啥」查看全文


本周在安卓博客周刊里看到了一篇:

请不要滥用SharedPreference

http://weishu.me/2016/10/13/sharedpreference-advices

感觉颇有收获。而我恰好在这周碰到了一个关于SharedPreference的bug,让我费了一番功夫才找出,所以在这里就写一篇文章来记录一下这个bug。

Bug再现

首先让我来讲下这个bug的由来,并通过一个demo来模拟下bug现场。

在我所做的产品中有个XX云盘模块,其中有部分登陆信息是记录在SharedPrefrence中的。突然有一天,测试的同学拿来一部手机跟我说,这个手机登陆以后,杀掉进程再重新启动app就会丢失掉之前的登陆信息。当时我就一脸懵逼,再拿来观察一下现象,更加奇怪的事情是:登陆以后我发现登陆信息确实保存在了SharedPreference中,杀掉进程以后也还在,但是重新打开app以后,发现SharedPreference里的数据有部分被清空了(注意不是全部清空,而是部分)。

从现象上来看让人感到一头雾水,同时有的手机上又没有这种奇怪的现象发生,让我一时间都觉得是不是这个手机的rom比较烂所导致的。但是作为一个开发人员当然不能如此妄下定论,于是我写了一个demo来测试,发现没有上述的问题。那么可以肯定的是,这是我自己的app的逻辑存在bug!但是我全局找了一遍代码,并没有发现有任何去删除SharedPreference值的逻辑,于是这条线索又断了。

一头雾水的我只能转而研究SharedPreference文件本身,此时我发现了一个很怪异的现象,我的SharedPreference里有个key为null的值。key为null?作为一个开发人员,对于空指针还是有着十足的敏感,于是我就怀疑到了是不是这个为null的key引起的呢?下面我通过一个demo演示就真相大白了:







请到「今天看啥」查看全文