Проблемы утечки Android SQLite - PullRequest
       2

Проблемы утечки Android SQLite

2 голосов
/ 03 декабря 2010

Эй, у меня есть настройка соединения с базой данных в приложении для Android, но LogCat продолжает сообщать мне об утечке SQLite.

12-03 15:07:23.169: ERROR/Database(2509): Leak found
12-03 15:07:23.169: ERROR/Database(2509): java.lang.IllegalStateException: /data/data/com.domain/databases/db.db SQLiteDatabase created and never closed
12-03 15:07:23.169: ERROR/Database(2509):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1784)
12-03 15:07:23.169: ERROR/Database(2509):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:804)
12-03 15:07:23.169: ERROR/Database(2509):     at com.domain.DatabaseConnection.openDataBase(DatabaseConnection.java:118)
12-03 15:07:23.169: ERROR/Database(2509):     at com.domain.global.ZonesLoaded.InitZones(ZonesLoaded.java:32)
12-03 15:07:23.169: ERROR/Database(2509):     at com.domain.ZoneActivity.onCreate(ZoneActivity.java:34)
12-03 15:07:23.169: ERROR/Database(2509):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-03 15:07:23.169: ERROR/Database(2509):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
12-03 15:07:23.169: ERROR/Database(2509):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2411)
12-03 15:07:23.169: ERROR/Database(2509):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
12-03 15:07:23.169: ERROR/Database(2509):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
12-03 15:07:23.169: ERROR/Database(2509):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:648)
12-03 15:07:23.169: ERROR/Database(2509):     at android.widget.TabHost.setCurrentTab(TabHost.java:320)
etc...

После прочтения других сообщений , таких как здесь или здесь , можно предположить, что я не реализовывал метод close в своем классе DBAdapter. Однако я создал это:

public synchronized void close()
{
    if(myDatabase != null)
        myDatabase.close();

    super.close();
}

Я начинаю задумываться о том, как все сводится к тому, как я использую адаптер базы данных, хотя я только что протестировал свое приложение на гораздо более быстром устройстве (Samsung Galaxy S), и это работало без проблем! У кого-нибудь есть здесь советы?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

У меня тоже была эта проблема, пока я не вызвал явный вызов close в методе onPause своей деятельности. Я склонен следовать шаблону открытия базы данных при возобновлении / создании и закрывать ее перед паузой (как со всеми другими ресурсами, которые хранят состояние).

Чтобы быть очень ясным, я не рекомендую открывать / закрывать БД по требованию или на разовой основе. Почти всегда лучше открывать БД заранее и держать ее открытой на время действия, а затем закрывать, когда действие приостанавливается.

0 голосов
/ 26 июля 2016

Я думаю, что вы должны сохранить доступ к БД для активности, когда это необходимо, и закрыть как курсор (если используется), так и базу данных после ее использования, чтобы эффективно управлять ресурсом памяти. Это эффективный способ уберечь его от лекаге или проблем с блокировкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...