我的应用程序中有一个恢复选项,它读取备份文件,并将其复制到原始的sqlite-db上。
除了恢复之后旧的db-file仍处于活动状态之外,一切似乎都能正常工作。如果我使用System.exit(0);
完全关闭我的应用程序,它会加载已恢复的数据库,并且一切都按预期工作。
似乎应用程序将旧的db-file保存在RAM中,尽管这看起来很奇怪......
代码下方:
File dbFile = new File(DatabaseHelper.DB_PATH + DatabaseHelper.DB_NAME);
if (dbFile.exists()) {
Boolean fileDeleted = dbFile.delete();
Log.i(DatabaseHelper.LOG_TAG, "fileDeleted: " + String.valueOf(fileDeleted));
}
try {
Log.i(DatabaseHelper.LOG_TAG, "myDatabase.isOpen: " + String.valueOf(dbHelper.myDataBase.isOpen()));
dbHelper.cleanup();
Log.i(DatabaseHelper.LOG_TAG, "myDatabase.isOpen: " + String.valueOf(dbHelper.myDataBase.isOpen()));
Boolean newFileCreated = dbFile.createNewFile();
Log.i(DatabaseHelper.LOG_TAG, "newFileCreated: " + String.valueOf(newFileCreated));
FileUtil.copyFile(dbBackupFile, dbFile);
return null;
} catch (IOException e) {
Log.e(DatabaseHelper.LOG_TAG, e.getMessage(), e);
return e.getMessage();
}
有人经历过同样的事情吗?
我确实检查过一些活动是否有数据库打开,但据我所知,这是无处可去的。所有日志条目都显示预期/正确的值......
我已尝试过所有内容,因此非常感谢任何建议/想法!
提前致谢。
Greetingz, Koen Hoorelbeke<
答案 0 :(得分:0)
为什么您使用System.exit(0)
,请使用finish()
。哪个finish()
活动和GC将处理内存,您将向解决方案迈进一步。我认为删除文件需要一些时间,我已经在模拟器上注意到了。您是从任何文件夹(原始/资产)复制数据库?
我建议您在复制旧版本和新版本的内容之前尝试close()
或releaseMemory()
数据库。然后将新数据库文件重新分配给db对象