diff --git a/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java b/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java index 0e839319..9936ee50 100644 --- a/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java +++ b/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java @@ -15,6 +15,7 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.GuardedAsyncTask; +import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -33,7 +34,7 @@ @ReactModule(name = AsyncStorageModule.NAME) public final class AsyncStorageModule - extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable { + extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable, LifecycleEventListener { // changed name to not conflict with AsyncStorage from RN repo public static final String NAME = "RNC_AsyncSQLiteDBStorage"; @@ -91,6 +92,7 @@ public AsyncStorageModule(ReactApplicationContext reactContext) { AsyncStorageModule(ReactApplicationContext reactContext, Executor executor) { super(reactContext); this.executor = new SerialExecutor(executor); + reactContext.addLifecycleEventListener(this); mReactDatabaseSupplier = ReactDatabaseSupplier.getInstance(reactContext); } @@ -118,6 +120,18 @@ public void clearSensitiveData() { mReactDatabaseSupplier.clearAndCloseDatabase(); } + @Override + public void onHostResume() {} + + @Override + public void onHostPause() {} + + @Override + public void onHostDestroy() { + // ensure we close database when activity is destroyed + mReactDatabaseSupplier.closeDatabase(); + } + /** * Given an array of keys, this returns a map of (key, value) pairs for the keys found, and * (key, null) for the keys that haven't been found. diff --git a/android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java b/android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java index 6e191de2..c7c59b0e 100644 --- a/android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java +++ b/android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java @@ -7,15 +7,13 @@ package com.reactnativecommunity.asyncstorage; -import javax.annotation.Nullable; - import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; - import com.facebook.common.logging.FLog; import com.facebook.react.common.ReactConstants; +import javax.annotation.Nullable; /** * Database supplier of the database used by react native. This creates, opens and deletes the @@ -151,7 +149,7 @@ private synchronized boolean deleteDatabase() { return mContext.deleteDatabase(DATABASE_NAME); } - private synchronized void closeDatabase() { + public synchronized void closeDatabase() { if (mDb != null && mDb.isOpen()) { mDb.close(); mDb = null;