我不擅长 android 开发, 问一个关于 webview 的问题, 在 h5 中使用 localstorage, indexedDB, 在应用存活期间, 是可以持久化的, 为什么 app 重启了之后, 就读不到了呢, 感谢解答 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
playground
V2EX    Android

我不擅长 android 开发, 问一个关于 webview 的问题, 在 h5 中使用 localstorage, indexedDB, 在应用存活期间, 是可以持久化的, 为什么 app 重启了之后, 就读不到了呢, 感谢解答

  •  
  •   playground 2024-03-13 22:10:17 +08:00 10375 次点击
    这是一个创建于 646 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2024-03-15 17:51:55 +08:00
    目前排查进度: 并不是缓存失效, 而是每次启动都生成了新的 webview 缓存目录, 在 cache 目录下有多个 webview_为前缀的目录, 这有可能是什么原因导致的呢, 我在其他项目中只有一个 webview 目录. 有 api 可以改动这个么
    第 2 条附言    2024-03-15 19:25:42 +08:00
    问题解决更新:
    项目中有这样一行代码 WebView.setDataDirectorySuffix(Process.myPid() + "");
    每次 app 启动会生成新的缓存目录导致的, 由于知识盲区导致排查花费了一些时间.
    15 条回复    2024-03-14 14:05:34 +08:00
    ZZ74
        1
    ZZ74  
       2024-03-13 22:25:11 +08:00 via Android
    因为安卓应用跑在一个虚拟机啊,重启了就是整个虚拟机都销毁了啊。。w
    N9f8Pmek6m8iRWYe
        2
    N9f8Pmek6m8iRWYe  
       2024-03-13 22:33:57 +08:00
    是的,在 Android 应用程序中使用 WebView 时,`localStorage`和`IndexedDB`的行为应该与在标准浏览器中相同。它们都是用于在客户端持久化存储数据的技术,即使在应用程序重启后,数据也应该保持不变。如果数据在应用程序重启后丢失,可能是由于以下原因:

    1. **WebView 配置**:如果 WebView 没有正确配置,或者应用程序的某些设置导致 WebView 在重启时清除了数据。

    2. **应用程序的清理机制**:某些 Android 应用程序可能会有自己的清理机制,这可能会影响到 WebView 中的数据持久化。

    3. **存储空间限制**:`localStorage`通常有 5MB 的存储限制,而`IndexedDB`可以使用更多的存储空间,但如果用户的设备存储空间不足,可能会影响数据的持久化。

    4. **应用程序的权限**:应用程序可能需要特定的权限来保证数据的持久化,如果没有这些权限,数据可能无法保存。

    5. **浏览器缓存策略**:不同的 Android 版本和浏览器可能有不同的缓存策略,这可能会影响到数据的持久化。

    为了确保数据能够在应用程序重启后仍然可用,开发者需要确保 WebView 和应用程序的设置都支持数据持久化,并且要考虑到不同设备和浏览器版本之间的兼容性问题。

    源: 与必应的对话,2024/3/13
    (1) How to use IndexedDB to Store Local Data for your Web App. https://dev.to/alexeagleson/how-to-use-indexeddb-to-store-data-for-your-web-application-in-the-browser-1o90.
    (2) A complete guide to using IndexedDB - LogRocket Blog. https://blog.logrocket.com/using-indexeddb-complete-guide/.
    (3) 浏览器缓存库设计总结( localStorage/indexedDB ) - 知乎. https://zhuanlan.zhihu.com/p/120761426.
    N9f8Pmek6m8iRWYe
        3
    N9f8Pmek6m8iRWYe  
       2024-03-13 22:34:22 +08:00
    这种标准问题,gpt 就解决了,没必要发个帖子
    playground
        4
    playground  
    OP
       2024-03-13 22:36:52 +08:00
    @N9f8Pmek6m8iRWYe 我使用 GPT4, 并没有解决我的问题, 才会发帖询问
    codehz
        5
    codehz  
       2024-03-13 22:38:31 +08:00
    setDomStorageEnabled 开了吗
    playground
        6
    playground  
    OP
       2024-03-13 22:42:06 +08:00
    @codehz setDomStorageEnabled/setJavascriptEnabled/setDatabaseEnabled 都开了, 我新建一个项目, 是可以缓存的, 现在接手的项目不知道哪里导致的不能缓存
    ZGame
        7
    ZGame  
       2024-03-14 08:36:02 +08:00
    @playground 对 js 做下原生桥接, 对接下 sp ,或者 sqlite 应该没啥大问题
    codehz
        8
    codehz  
       2024-03-14 08:36:11 +08:00 via iPhone
    可能是因为有多个 webview 同时存在导致的问题,试试这个项目

    https://github.com/didimoo/AndroidLocalStorage
    jifengg
        9
    jifengg  
       2024-03-14 08:53:15 +08:00
    如果特性都开了,那么检查一下 webview 初始化的时候是否清理了缓存。有可能之前的开发为了避免缓存问题,启动的时候统一清理了。
    playground
        10
    playground  
    OP
       2024-03-14 09:58:33 +08:00
    @ZGame js 桥接机制有, 我理解你的意思是通过 js 桥接 原生层面来做缓存么, 现在是 h5 做了 indexedDB 缓存, app 重启导致 indexedDB 被清空, h5 本身的机制失效了, 如果能解决这个问题是成本最小的
    ZGame
        11
    ZGame  
       2024-03-14 11:36:37 +08:00
    @playground 嗯 我觉得这样实现成本很低
    playground
        12
    playground  
    OP
       2024-03-14 13:48:55 +08:00
    @ZGame 但是桥接只能传输字符串吧, h5 内部通过 indexedDB 还要缓存图片文件等
    playground
        13
    playground  
    OP
       2024-03-14 13:50:27 +08:00
    @jifengg 我新建了一个 webview, 全部重新设置, 也是一样的效果, 我怀疑有什么统一的配置或机制导致了, 在这个项目中 webview 都不能持久化缓存
    playground
        14
    playground  
    OP
       2024-03-14 13:50:45 +08:00
    @codehz 确实有多个 webview, 我排查一下
    ZGame
        15
    ZGame  
       2024-03-14 14:05:34 +08:00
    @playground base64 加解密就行啊...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2463 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:49 PVG 18:49 LAX 02:49 JFK 05:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86