liangjingkanji / Serialize

🍒 Android 简单高性能读写本地数据, 直接存储对象/基础类型
http://liangjingkanji.github.io/Serialize/
Apache License 2.0
239 stars 20 forks source link

改变状态后立马杀掉进程,重新打开APP,状态又变成默认值 #26

Closed rayzeng0221 closed 1 year ago

rayzeng0221 commented 1 year ago

我有个引导页,执行完引导页后,改变Flag,然后立马杀掉进程,重新打开APP 又重新出现引导页了,打印值,又变成默认值,目前就是第一次会出现,第二次杀进程再进入APP就是正常,这是必现。 我使用的是动态键名: // 是否显示P80引导页 var isShowHomeGuideP80: Boolean by serialLazy(true,"isShowHomeGuideP80_${userId}")

liangjingkanji commented 1 year ago

请fork仓库在demo中复现此问题

rayzeng0221 commented 1 year ago

请fork仓库在demo中复现此问题

我刚刚取消了使用动态键名,就是把第二个参数去掉,就是正常的了,是不是你的动态键名的 代码有点问题?今天要急着上线 ,愁死了

liangjingkanji commented 1 year ago

本项目单纯是开源分享互助目的

你总是提和你项目中业务相关的问题, 我又不能看你项目源码我无法分析问题, 如果你有类似问题建议查看Serialize源码(实现源码仅仅四五十行代码而已)或者在demo中复现问题

如果你觉得本框架给你带来很多问题可以有理由选择其他框架

liangjingkanji commented 1 year ago

如果你觉得着急就请先fork仓库复现问题, 而不是在这里重复无意义的问题描述

liangjingkanji commented 1 year ago

请fork仓库在demo中复现此问题

我刚刚取消了使用动态键名,就是把第二个参数去掉,就是正常的了,是不是你的动态键名的 代码有点问题?今天要急着上线 ,愁死了

动态键名仅仅是一个参数, 属于kotlin基本语法, 不存在什么黑科技

liangjingkanji commented 1 year ago

如果你升级了Serialize-3.0, 建议先查看下更新日志(大版本升级存在破坏性迁移), 它存在第一次丢失旧数据(没有使用mmapId情况下)

rayzeng0221 commented 1 year ago

如果你升级了Serialize-3.0, 建议先查看下更新日志(大版本升级存在破坏性迁移), 它存在第一次丢失旧数据(没有使用mmapId情况下)

问题找到原因了,是因为我的动态键名带用户ID ,然后这个用户ID 又是你这个库定义的其中一个key,如果直接这样用就会出现我说的 那个问题。我现在改成了 每次进入首页 用一个全局变量来保存这个本地存储用户ID,然后动态键名的用户ID就替换成这个全局变量。这种用法我不知道算是本身不允许这样使用 还是 属于Bug,这个需要大佬看一下啦?

rayzeng0221 commented 1 year ago

// 用户ID var userId:String by serialLazy("") // 是否显示P80引导页 var isShowHomeGuideP80: Boolean by serialLazy(true,"isShowHomeGuideP80_${userId}")

rayzeng0221 commented 1 year ago

这种用法,只要是安装应用后,第一次改变Flag,然后退出APP,重新打开APP,就是必现的,会重新恢复默认值

liangjingkanji commented 1 year ago

当前问题有发现原因或者依然存在吗?

liangjingkanji commented 1 year ago
  1. 函数参数仅会调用一次, 这是语法问题框架并不能解决, 除非将name改为函数回调

  2. 更新至最新版本将支持{}函数回调设置name: 动态键名

    private var balance: String by serial("0.0", { "balance-$userId" })
  3. 推荐使用Serialize.hook实现拦截动态配置mmapId隔离数据, 示例文档