私のアプリケーションはこの警告を発します
データベース '+ data + data + com_example_test + database'のSQLiteConnectionオブジェクトがリークしました!アプリケーションを修正して、進行中のトランザクションを適切に終了し、不要になったらデータベースを閉じてください。
ただし、使用するたびにdbオブジェクトとカーソルを閉じます。
try {
while (cursor.moveToNext()) {
...
}
} finally {
if (cursor != null && !cursor.isClosed())
cursor.close();
}
...
db.close();
何が問題なのか理解するのを手伝ってもらえますか?ありがとう!!!
UPDATE !私はこの投稿からこの解決策を試してみます すべてが閉じているにもかかわらずSQLite Connectionがリークしました
そして、私はもうメモリリークがありません、それは良い解決策ですか?
可能な解決策:
not committed the transactions
_があります(開始したら、常にトランザクションを閉じる必要があります)Sqlite
を使用している場合は、開いたカーソルを閉じたかどうかを確認します(投稿したコードからこのステップを実行したように見えます)db.close
_をfinally
ブロックに移動しますcontext.deleteDatabase(...)
で削除してからdbHelper.getWritableDatabase()
で再作成する前に、データベースで_db.close
_を呼び出していないdb.close
からfinally
ブロックに移動します。
//Inside your SQLite helper class
@Override
public synchronized void close () {
if (db != null) {
db.close();
super.close();
}
}
//Inside the activity that makes a connection to the helper class
@Override
protected void onDestroy () {
super.onDestroy();
//call close() of the helper class
dbHelper.close();
}
おそらく、デバッグサンプルのブレークポイントを削除するのを忘れました: ここに画像の説明を入力してください
私の場合、エラーは、yが新しいデータをダウンロードしようとしたときに発生し、データベースを更新する必要がありました。
SELECT 0
を呼び出してデータベースをインスタンス化することで解決しました。データベースが更新されるので、その後、新しいデータをダウンロードしようとします。そして、うまくいきました。