0

simpleCursorAdaptor をロードするスピナーを使用したアクティビティがあります。別のクラスを呼び出して、simpleCursorAdaptor で使用されるカーソルを返します。カーソルまたはアダプターのクラス レベル変数を保持しません。

このアクティビティが終了したら、カーソルを閉じたいと思います。するべきか:

a) アクティビティの onDestroy() イベントで、アダプターを介してスピナーからカーソルを取得し、そこで閉じるか、

b) 最初にカーソルを生成するデータ ハンドラ クラス内

4

3 に答える 3

3

loaderManager または supportedLoaderManager を使用してカーソルを作成する場合、カーソルを閉じることを心配する必要はありません。ローダーを使用してカーソルを開き、UI スレッドから実行することもお勧めします。

ただし、何らかの理由で、UI スレッドで contentresolver を使用してカーソルをクエリする必要がある場合は、onPause でカーソルを閉じ、onResume でカーソルを再クエリすることをお勧めします。最悪の場合、onDestroy でカーソルを閉じます。 onDestory が呼び出される前にアクティビティがガベージ コレクションされる可能性があるインスタンス。

ただし、上記のように、Loadermanager と LoaderCallbacks で CursorLoader を使用してカーソルを作成してみてください。

于 2012-06-19T23:19:07.760 に答える
1

メソッド startManagingCursor(Cursor c) を検討しましたか?

http://developer.android.com/reference/android/app/Activity.html#startManagingCursor(android.database.Cursor)

ただし、(ドキュメントに記載されているように)LoaderManager で CursorLoader を使用する必要があると思います。このクラスは、android-support ライブラリで利用できます。ただし、CursLoader は ContentProvider でしか機能しないことに注意してください。単純なカーソルを持つ CursorLoader が必要な場合は、 ContentProvider を使用しないこの CursorLoader の使用法を参照してください。

編集:

これはローダーでは非推奨になりました。

于 2012-06-19T23:19:15.143 に答える
-1

onStop()またはでカーソルを閉じる必要がありonDestroy()ます。または、クエリから Cursor を取得した後に呼び出すことができstartManagingCursor()、Android は Cursor を自動的に閉じます。

于 2012-06-19T23:24:30.473 に答える