uni-app webview 使用indexedDB存储的时候安卓端闪退

uni-app webview 使用indexedDB存储的时候安卓端闪退

开发环境 版本号 项目创建方式
Windows win10 64位 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win10 64位

HBuilderX类型:正式

HBuilderX版本号:2.8.8

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:meta40E

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

示例代码:

let _indexedDB = new IndexedDB(‘shengshiboxue’,‘svgabase’,1,()=>{
for(let key in self.mold){
// 检测是否存在
_indexedDB.get(key,(svgaData) => {
if(svgaData)return;
let { Downloader, Parser, Player } = window.JSsvga
const downloader = new Downloader()
const parser = new Parser()
downloader.get(self.mold[key].path).then(fileData => {
parser.do(fileData).then((data) => {
_indexedDB.set(key,JSON.stringify(data))
})
})
})

    }  
});  

操作步骤:
真机调试或模拟器调试 : webview页面打开的时候,缓存svga的base64字符串到indexedDB 在存储的时候程序闪退,等待页面加载完毕在存储也闪退

预期结果:
正常能存储到indexedDB

实际结果:
存储过程闪退

bug描述:
保存svga的base64编码 运行pc端没有问题,运行android端在 indexedDB存储的时候 闪退

更多关于uni-app webview 使用indexedDB存储的时候安卓端闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

或者有其他方式在app端的webview页面 缓存大量数据的方式 可以推荐一下

更多关于uni-app webview 使用indexedDB存储的时候安卓端闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


已解决 app端不用indexedDb 存 用plus.storage.setItem(key,JSON.stringify(data))

这是一个典型的Android平台WebView对IndexedDB支持不完善导致的问题。在Android WebView中,IndexedDB的存储限制和稳定性相比PC浏览器要严格得多。

主要问题分析:

  1. 数据量过大:SVGA文件的base64编码数据量通常很大,Android WebView对单个IndexedDB事务的数据大小有限制,超出限制会导致崩溃。

  2. 异步操作时序:在页面初始化时立即进行大量IndexedDB操作,可能因WebView未完全就绪而触发闪退。

建议解决方案:

  • 数据分片存储:将大的base64数据分割成多个chunk存储
  • 延迟操作:在页面onReady后再执行IndexedDB操作
  • 添加容错机制:使用try-catch包装IndexedDB操作
  • 限制并发:避免同时执行多个IndexedDB事务

代码优化方向:

setTimeout(() => {
  try {
    // IndexedDB操作
  } catch(e) {
    console.error('IndexedDB操作失败', e)
  }
}, 1000)
回到顶部