2010-12-03 16 views
2

ちょっと、私はAndroidアプリケーションでデータベース接続の設定をしていますが、LogCatはSQLiteのリークについて教えています。Androidの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... 

他の記事like herehereを読んだ後、それは私が私のDBAdapterクラスのcloseメソッドを実装していなかったことを示唆しています。しかし、私はこれを作成しました:私はちょうどはるかに高速デバイス(サムスンギャラクシーS)の上に私のアプリをテストしたが、私は、それがダウンして、私はデータベースアダプタを使用していますどのようにある場合は疑問に思い始めている

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

    super.close(); 
} 

をし、これはまったく問題なく動作しました!誰でもここにヒントはありますか?

おかげ

+0

*私はそれがデータベースアダプター*をどのように使用しているのか不思議に思っています:それはあるかもしれませんが、私たちはあなたがそれをどのように使うか見る必要があります:) – Nailuj

+0

それは本当です。私は誰かが私のプロジェクトを書くのを探しているわけではありません。そういうわけではありません。他の誰かがこの問題を抱えているのではないかと疑問に思っています。 –

+0

私の謝罪はあなたがそれを解釈したら、単にあなたのコードをもっと見ることに興味がありました。なぜなら、あなたがすでに投稿したことからあなたが何をしているのか分からないからです。 – Nailuj

答えて

2

私は私の活動のonPauseメソッドで明示的に近いを呼び出してください行われるまで、私もこの問題を抱えていました。私は、resume/createでDBを開くというパターンに従う傾向があります(状態を保持する他のすべてのリソースと同様に)。

オンデマンドで、またはアドホックでDBの開閉をお勧めしません。ほとんどの場合、DBを早めに開いて、アクティビティの期間中は開いたままにして、アクティビティが中断されたときに閉じることをお勧めします。

+0

ありがとう、私はこれを試してみよう! –

0

私はあなたが必要なときにアクティビティにDBアクセスを保持し、メモリリソースを効率的に管理するために使用後にカーソル(使用している場合)とデータベースを閉じてください。これは、貸手やロックの問題からそれを保つ効率的な方法です