上次我注意到我的应用程序有SQLite数据库备份问题。要进行数据库备份,我正在将*.db
的{{1}}文件复制到内部存储中。为了还原,我从内部存储复制到/data/data/com.pkg.app/databases/db_name.db
。但是在Android P中有问题。这些db文件存在,但其权重为4kB。当我通过数据库浏览器打开那些文件时,我注意到该文件为空-没有表和数据。很奇怪,因为应用程序正常运行。问题是我应该在哪里寻找我的应用程序正在使用的数据库文件? Android 8及更低版本没有此问题。我正在使用模拟器。
答案 0 :(得分:1)
在Android P +中,WAL(预先写入日志)默认情况下处于打开状态。这将导致另外两个文件,这些文件在原始文件名后加上-shm(共享内存文件)和-wal(预写日志记录)。
这些备份或还原时需要复制,或者仅在确保数据库已完全检查点之后才需要备份,然后可以在还原过程中删除-shm和-wal文件。
另一种方法是禁用WAL并使用效率较低的日志模式。
您可能希望签出Database Import and Export not working in Android Pie。