记录Android中登录时网络请求使用饿汉式单例的问题及解决过程

70 阅读2分钟

1. 实现功能

登录时需要支持用户修改IP功能,将用户输入的IP保存在MMKV中,利用饿汉单例模式方便后面调用

image.png

2.遇到的问题

当修改成功保存后立即登录,出现登录ip还是未修改之前的IP的情况

3.解决过程及思路

1、是不是没有保存成功

退出程序后,再次进入程序进行登录就是修改后的IP地址,说明保存成功了,这种情况排除

2、猜测是因为缓存问题

进行debug测试,发现调用方法处没有数据 为null(在单例模式初始化后调用),应该不是缓存问题,不然肯定还有未修改前的数据,根据此判断应该是没有数据没有被调用到

3、饿汉模式到底是什么时候初始化

是在我第一次调用前初始化 后面都不初始化 还是第一次调用时初始化 后面不初始化 这是我的疑问

4.最终的猜想

是因为饿汉式单例模式只有刚开始初始化一次 而这一次应该是我还未调用时就初始化了 虽然IP修改后是被保存了,但是在调用方法时获取的变量地址依然是原来数据存储的地址(因为后面没有初始化了)所以会出现重新进来程序就变成修改后,因为重新进来程序就等于又初始化了一次单例模式 自然是最新的数据存储

5.解决方式

可以在首次调用时,刷新一下存储(直接调用改变后的内部存储),之前的变量是访问改变前的内部存储

image.png

这是我对这个问题的理解 欢迎大家交流想法和技术