SharedPreferences 取值不正确
开发中每次登录成功后都会获取一个服务器返回的Token,退出后再重新登录Token的值就会变化
我发现在一个activity中每次获取的都是上一次的值,也就是退出在登录后在这个activity中获取的值还是上一次保存的值,这样就导致出现了bug,而其他activity读取都没有问题
经过搜索一番发现我设置的SharedPreferences的mode类型是 MODE_PRIVATE,而api的解释是:MODE_PRIVATE:代表私有访问模式,在Android 2.3及以前这个访问模式是可以跨进程的,之后的版本这个模式就只能访问同一进程下的数据。
难道我这个activity是运行在其他进程,可是我并没有设置什么其他进程啊,开发时跟别的activity都是一样的,后来发现这个activity引用了第三方sdk vitamio,在manifest配置里这个activity多了一条属性
android:process=":vitamio"
android:process标签的作用是 看看api的解释:
- 实现多进程可以通过设置service、broadcast、activity的标签android:process来实现。
- 一般情况下启动这些组件默认是在同一个进程里运行的,如果设置了android:process标签,则会运行在其他进程里。
- 如果android:process的value不是”:”开头,则系统里有同样名字的进程的话,会放到已存在的同名进程里运行,这样能减小消耗。
- 如果android:process的value是以”:”开头,则启动一个名字为value的进程。
这下明白了我这个activity为什么运行在其他进程了,找到问题原因就可以更改了,由于引用了第三方的sdk sdk的demo都是那么配置的 所以我不打算去掉android:process标签,而是把SharedPreferences配置改成了
MODE_MULTI_PROCESS
允许多个进程访问同一个SharedPrecferences
问题得到解决