2011-07-30 16 views
1

自分のデータベースでカスタムデータベースクラスを使用してデータベースを管理し、トランザクションを処理しています。インスタンス化するたびに、そのコンストラクタにアプリケーションコンテキストを渡します。 Androidデベロッパーサイトの記事を読んで、私のアプリケーションで膨大なメモリリークを引き起こす可能性のあることをしているのかどうか疑問に思う。簡体字、私のコードは、最初のアクティビティオフ、次のようになります。このコードは潜在的なメモリリークを引き起こす可能性がありますか?

public class MyActivity extends Activity 
    { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.somelayout); 

      Database db = new Database(getApplicationContext()); 
     } 

    } 

そして、(別々のファイルで)自分のデータベースクラスのようになります。コードはバグがある可能性があります

public class Database 
{ 

    Context context; 

    public Database(Context context) 
    { 
     this.context = context; 
    } 

    public DatabaseHelper extends SQLiteOpenHelper 
    { 
     // Pass the context to the constructor etc etc. 
    } 

} 

、私はそれを書きましたすぐにメモ帳で。とにかく、これは私がdbオブジェクトがコンテキストからユーザが移動したときにコンテキストを保持し、膨大な量のリソースを消費してしまうことを心配していました。これが事実である場合、どうすればこの問題を回避できますか?それがもはや必要でなくなったら、破壊して反対する方法はありますか?

答えて

2

dbで参照されるオブジェクトは、onCreateが終了するとすぐにガベージコレクションの対象となります。だからここに問題はない。

dbまたはDatabase.contextstaticフィールドに設定した場合は、心配する必要があります。

+0

ありがとう、私の心の負荷を取った:) –

1

データベースオブジェクトがリソースを保持していて正しく閉じられていないと、問題が発生する可能性があります。

可能な限り純粋なSQLレベルに留まり、JDBCプーリングを使用してこれらの処理方法を標準的に取得します。