2017-05-02 7 views
0

「コンテキスト」を入力するだけです:私はandroid/javaの新機能で、メモリをもっと「密接に」働かせるために、これが私には愚かな疑問を提起します。Android SQLiteOpenHelperオープン/クローズ/カーソル管理

1)SQLiteOpenHelper.getWritableDatabase()は、すでに割り当てられたオブジェクトへのポインタを返します。または、新しい独立したオブジェクトを割り当てますか?

2)オブジェクトSQLiteOpenHelper.getWritableDatabase()がバックグラウンドタスク(スレッド)で動作しているかどうかを確認する方法?

3)database.queryから作成されたカーソルは依存し、データベースオブジェクトとメモリを共有します(データベースが解放されると解放されます)。または、データベースメモリが解放された後に使用できる独立したオブジェクトですか?

4)javaがメモリ自体を処理する場合、Cursor.close()とSQLiteOpenHelper.getWritableDatabase()。close()が必要な場合は?

答えて

0
  1. getWritableDatabase() - 作成および/または読み込みと書き込みのために使用するデータベースを開きます。これが初めて呼び出されると、データベースが開き、onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase、int、int)および/またはonOpen(SQLiteDatabase)が呼び出されます。

一度あなたがデータベースに書き込む必要があるたびに、このメソッドを呼び出すことができるように、データベースは、をキャッシュされている、オープンに成功。 (データベースが不要になったときにclose()を呼び出すようにしてください)。不正なアクセス権やディスクがいっぱいの場合、このメソッドは失敗する可能性がありますが、

2,3。 SQLiteDatabaseのクエリの結果を公開するCursor実装。 SQLiteCursorは内部的には同期されていないので、複数のスレッドのSQLiteCursorを使用するコードは、SQLiteCursorを使用するときに独自の同期を実行する必要があります。

  1. カーソルを閉じて、すべてのリソースを解放し、完全に無効にします。 deactivate()とは異なり、requery()の呼び出しはCursorを再度有効にしません。
関連する問題