1

CursorLoader と ContentProvider を使用して、データベースのコンテンツを GridView にロードしています。

アプリケーションは動作していますが、ログに「データベースで close() が明示的に呼び出されたことはありません。

この問題に関するいくつかのトピックと、「ContentProvider でデータベースを閉じる」に対する応答を見つけました。データベース」。

それで、何がうまくいかないのですか?データベースは ContentProvider 内で開かれているため、データベースを閉じると返されるカーソルが空になります。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

そのメッセージは、db が閉じられる前にガベージ コレクションされるときに出力されます。ここでは、この問題について多くの議論があります。

ContentProvider でデータベースを閉じる

tl;dr: 心配しないでください。一般に、データベースを閉じることは実際には非生産的です。トランザクションとカーソルを閉じて、Android に DB を管理させます。

ところで、onCreate で DB を開くことに注意してください。SQLiteDatabaseHelper を使用して DB を開くと、onUpdate メソッドが呼び出される場合があります。DB の更新中に ANR によってプログラムが強制終了されることほど悪いことはありません。

于 2013-03-17T18:04:20.393 に答える