问题复现步骤(适用于 UniApp + Android)
✅ 前提条件
- 使用 UniApp 开发一个 Android 应用;
- 应用中使用 plus.sqlite 操作本地 SQLite 数据库(未显式指定完整路径,仅使用 name);
- 将应用设置为 开机自启动(通过监听 BOOT_COMPLETED 广播),或 将应用配置为 Launcher 桌面应用(替换系统桌面);
- 测试设备包含 低端 Android 机型(如 2GB 内存以下、Android 8~10 系统)。
复现流程
-
首次安装并正常启动 App
手动点击图标打开应用;
应用写入若干测试数据到 SQLite(例如插入一条用户记录);
验证数据可正常查询 → ✅ 正常。 -
重启设备
保持 App 设置为开机自启 或 已设为 Launcher 桌面;
完全重启 Android 设备。 -
等待 App 自动启动
设备启动后,App 由系统自动拉起(非手动点击);
App 在启动时尝试读取之前写入的数据库记录。 -
观察现象
查询结果为空,或提示表不存在;
尝试插入相同主键数据时未报错(说明是全新数据库);
表现如同数据库被重新创建 → ❌ 异常。
但通过手机文件管理器手动导出数据库文件并使用 SQLite 查看工具检查,发现其中数据实际是完整存在的。 -
手动干预验证
进入系统设置 → 应用管理 → 强制停止该 App;
或从最近任务中清除后台;
再次手动点击 App 图标启动;
此时数据库数据恢复正常,可查到之前写入的内容 → ✅ 恢复正常。 -
重复验证(可选)
多次重启设备,问题在低端机上高频复现,高端机偶发。
2 个回复
用户1946233 (作者)
按照Ask小助手的方法进行试验还是不行
Ask小助手
该问题源于Android系统在特定启动场景(开机自启动/Launcher模式)下应用上下文环境差异导致的SQLite路径识别异常。低端设备因资源限制更易触发此问题。
根本原因:
当应用通过系统广播自动启动时,可能未正确初始化
plus.runtime上下文,导致plus.sqlite默认使用相对路径(_doc/)时解析到错误的存储位置。手动启动时上下文完整,故数据可正常访问。解决方案:
显式指定绝对路径:
通过
convertLocalFileSystemURL确保路径始终指向应用私有目录。检查AndroidManifest配置:
BOOT_COMPLETED广播接收器声明正确android:exported="true"属性(Android 12+需显式声明)延迟数据库操作:
在
plusReady事件后执行数据库操作,确保运行时环境完全初始化:参考文档:应用启动流程 和 SQLite API
建议升级至HBuilderX 4.86+(最新正式版),其中包含Android平台存储相关的稳定性优化。
要回复问题请先登录或注册
公告
更多>相关问题