3

オブジェクトの使用に関する多くのリンクに出くわしましたCursorが、どのように使用するのが最適かについてはわかりませんでした。それで、私は本当に答えてもらいたいいくつかの質問があります。

  • Cursorアプリケーションのすべてのデータベース操作に1 つを使用しても問題ありませんか? いいえの場合、なぜですか?
  • Cursor毎回使用後に sを開閉し続ける必要は本当にありますか?
  • このリンクの定義は、無効なるとどうなりますか? 再利用可能でしょうか?close()Closes the Cursor, releasing all of its resources and making it completely invalid.

どうもありがとう。

4

3 に答える 3

3

1.) アプリケーションのすべてのデータベース操作に 1 つの Cursor を使用してもよろしいですか? いいえの場合、なぜですか?

はい。カーソルを再利用することができます。ただし、Cursor の動作は、思っているほど直感的ではないことを知っておく必要があります。カーソルは、一部のデータ ストアからすべてのデータをフェッチして、そのすべてをメモリに格納するわけではありません。代わりに、必要に応じてデータのみをフェッチするため、メモリの使用が最小限に抑えられます。そのため、再初期化する前に Cursor を閉じることを常にお勧めします。そうは言っても、必要なたびに完全に新しい Cursor を作成しても、パフォーマンスが大幅に低下することはありません。

2.)カーソルを使用するたびに開閉し続けることが本当に必要ですか?

はい、はい、はい。電話のアクティビティを定期的にローカルデータベースに同期し、後で外部サーバーに送信するネットワークアプリケーションのデバッグで多くの問題が発生したことがあります。オープンとクローズ (特にクローズ) は、FileInputStream や Socket などの Java や Android での通信の他のストリームやエンドポイントと同様に重要です。

3.) このリンクでの close() の定義は、カーソルを閉じ、すべてのリソースを再利用し、完全に無効にします。無効になるとどうなりますか?再利用可能でしょうか?

上で述べたように、close() メソッドは、Java の他のクラスの他のほとんどの close() メソッドと同じように機能します。一度呼び出したら、Cursor を再度使用しないでください。これは、Socket のクラスの close() メソッドとまったく同じです。Socket が閉じられると、それ以上ネットワークを使用することはできません (つまり、再接続または再バインドすることはできません)。新しいソケットを作成する必要があります。

于 2013-09-18T09:40:34.737 に答える
0

カーソルを使用するベスト プラクティスは、ローダー (特にcursorLoader) を使用することです: https://developer.android.com/guide/components/loaders.html

于 2013-09-18T08:31:00.080 に答える