From 497b5faba98950ca4bc8cccf6489b61fb95c799f Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Thu, 17 Dec 2015 10:47:33 -0800 Subject: [PATCH] Optimized database creation for a new user If the file doesn't exist, database can be kept in memory. It's safe because the database will be migrated and disposed of immediately after onCreate finishes. Bug: 26237300 Change-Id: Ib37c520f28960c8d6b9ce8dd719ffbcc11a97a58 --- .../providers/settings/DatabaseHelper.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index d4e428e280b60..7338a9cb654bd 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -116,6 +116,12 @@ class DatabaseHelper extends SQLiteOpenHelper { // cleaned up automatically when the user is deleted. File databaseFile = new File( Environment.getUserSystemDirectory(userHandle), DATABASE_NAME); + // If databaseFile doesn't exist, database can be kept in memory. It's safe because the + // database will be migrated and disposed of immediately after onCreate finishes + if (!databaseFile.exists()) { + Log.i(TAG, "No previous database file exists - running in in-memory mode"); + return null; + } return databaseFile.getPath(); } } @@ -130,8 +136,16 @@ class DatabaseHelper extends SQLiteOpenHelper { return mValidTables.contains(name); } + private boolean isInMemory() { + return getDatabaseName() == null; + } + public void dropDatabase() { close(); + // No need to remove files if db is in memory + if (isInMemory()) { + return; + } File databaseFile = mContext.getDatabasePath(getDatabaseName()); if (databaseFile.exists()) { databaseFile.delete(); @@ -145,6 +159,10 @@ class DatabaseHelper extends SQLiteOpenHelper { public void backupDatabase() { close(); + // No need to backup files if db is in memory + if (isInMemory()) { + return; + } File databaseFile = mContext.getDatabasePath(getDatabaseName()); if (!databaseFile.exists()) { return;