1
ZZ74 273 天前 via Android
因为安卓应用跑在一个虚拟机啊,重启了就是整个虚拟机都销毁了啊。。w
|
2
N9f8Pmek6m8iRWYe 273 天前
是的,在 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. |
3
N9f8Pmek6m8iRWYe 273 天前
这种标准问题,gpt 就解决了,没必要发个帖子
|
4
playground OP @N9f8Pmek6m8iRWYe 我使用 GPT4, 并没有解决我的问题, 才会发帖询问
|
5
codehz 273 天前
setDomStorageEnabled 开了吗
|
6
playground OP @codehz setDomStorageEnabled/setJavaScriptEnabled/setDatabaseEnabled 都开了, 我新建一个项目, 是可以缓存的, 现在接手的项目不知道哪里导致的不能缓存
|
7
ZGame 273 天前
@playground 对 js 做下原生桥接, 对接下 sp ,或者 sqlite 应该没啥大问题
|
8
codehz 273 天前 via iPhone
|
9
jifengg 273 天前
如果特性都开了,那么检查一下 webview 初始化的时候是否清理了缓存。有可能之前的开发为了避免缓存问题,启动的时候统一清理了。
|
10
playground OP @ZGame js 桥接机制有, 我理解你的意思是通过 js 桥接 原生层面来做缓存么, 现在是 h5 做了 indexedDB 缓存, app 重启导致 indexedDB 被清空, h5 本身的机制失效了, 如果能解决这个问题是成本最小的
|
11
ZGame 273 天前
@playground 嗯 我觉得这样实现成本很低
|
12
playground OP @ZGame 但是桥接只能传输字符串吧, h5 内部通过 indexedDB 还要缓存图片文件等
|
13
playground OP @jifengg 我新建了一个 webview, 全部重新设置, 也是一样的效果, 我怀疑有什么统一的配置或机制导致了, 在这个项目中 webview 都不能持久化缓存
|
14
playground OP @codehz 确实有多个 webview, 我排查一下
|
15
ZGame 273 天前
@playground base64 加解密就行啊...
|