恢复sqlite数据库后,旧文件保持活动状态?

时间:2011-07-28 18:20:58

标签: android sqlite backup restore

我的应用程序中有一个恢复选项,它读取备份文件,并将其复制到原始的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<

1 个答案:

答案 0 :(得分:0)

为什么您使用System.exit(0),请使用finish()。哪个finish()活动和GC将处理内存,您将向解决方案迈进一步。我认为删除文件需要一些时间,我已经在模拟器上注意到了。您是从任何文件夹(原始/资产)复制数据库?

我建议您在复制旧版本和新版本的内容之前尝试close()releaseMemory()数据库。然后将新数据库文件重新分配给db对象