После восстановления базы данных sqlite старый файл остается активным. - PullRequest
2 голосов
/ 28 июля 2011

В моем приложении есть опция восстановления, которая считывает файл резервной копии и копирует его в исходный файл sqlite-db.

Кажется, все работает нормально, за исключением того, что после восстановления старый db-файл все еще активен. Если я полностью выключу свое приложение, используя System.exit(0);, оно загрузит восстановленную базу данных, и все будет работать как положено.

Кажется, что приложение хранит старый db-файл в оперативной памяти, хотя это кажется странным ...

Ниже кода:

             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, Коен Хурельбеке <</p>

1 Ответ

0 голосов
/ 28 июля 2011

Почему вы используете System.exit(0), используйте finish().Который будет finish() активен, а GC позаботится о памяти, и вы станете шагом вперед к решению.Я думаю, что это займет некоторое время, прежде чем файл будет удален, я заметил это на эмуляторе.Вы копируете базу данных из какой-либо папки (raw / assets)?

Я предлагаю вам попробовать close() или releaseMemory() базу данных, прежде чем вы начнете копировать старый и новый.А затем переназначить объекту db новый файл базы данных

...