今天遇到的问题
账号A登陆后
切换账号B后,书架内容展示的是A账号的内容,后续再退出登陆结果还是A的内容
书架是一个fragment 书架内容通过greendao保存
项目使用dagger2注入的方式
账号退出做了删除书架的db表,在登陆后greendao重新创建db表
在排查后定位到可能是缓存问题,起初以为是dagger2中缓存了greendao greendao一直使用缓存内容,因此不再使用注入的方式获取greendao的实例,而是进入fragment时重新创建greendao实例,也确实解决了问题
但是后续思考应该不仅仅是dagger2的问题,因为做了删除db表的操作,所以greendao中持有的db仍然是删除的db表,因此会出现后续就算重新创建表格,在进入书架时dagger2缓存的fragment
使用的仍然是第一次登录A中得到的db表,所以才会出现虽然db表中已经是最新的书籍了但是展示出来的仍然不对
按照上述思路,继续进行对应修改:在退出账号时不删除db表,而是通知表格删除所有内容,db表文件跟后续账号登录使用同一个文件,切换账号后能书架能正常显示对应账号的内容
综上总结: 1.dagger2中确实存在了对注入对象的缓存,在后续需要创建时应该会优先使用已创建的对象;2.在使用greendao时如果删除db表文件在后续使用时需要重新创建新实例操作数据库否则会无法获取到最新内容。