CursorAdapters
google docs は、最初のコンストラクターを使用しないことを指摘しています。
CursorAdapter(Context context, Cursor c)
他に2つのオプションしかありません。
CursorAdapter(Context context, Cursor c, boolean autoRequery)
それは言う
自動再クエリを制御できるコンストラクタ。これは使用せず、代わりに CursorAdapter(Context, Cursor, int) を使用することをお勧めします。このコンストラクターを使用すると、FLAG_REGISTER_CONTENT_OBSERVER が常に設定されます。
と
CursorAdapter(Context context, Cursor c, int flags)`
これは、推奨されるコンストラクターであると述べています。
問題は、最後のコンストラクターで使用するフラグがFLAG_AUTO_REQUERY
(int 1) とFLAG_REGISTER_CONTENT_OBSERVER
(int 2) の 2 つしかないことです。バックグラウンドでの管理と更新に CursorLoader を使用しているため、使用FLAG_AUTO_REQUERY
しても意味がありません。ではFLAG_REGISTER_CONTENT_OBSERVER
、 を使用する場合は必要ありませんCursorLoader
。
今、私はCursorAdapter(Context context, Cursor c, int flags)
それが私のでうまく動作するようにするためにどの整数を渡すのCursorAdapter
ですか? 私が心配しているのは、古いカーソルを正しく管理する方法です。これを行う正しい方法が本当にわかりません。
を使用する場合はFLAG_REGISTER_CONTENT_OBSERVER
、 で何かを行う必要がありますonContentChanged()
が、 で使用swapCursor()
する場合LoaderManager
は、カーソルが閉じていないため、 を実行するだけで済みますadapter.swapCursor(cursor).close()
。onContentChanged()
しかし、それはinと競合しCursorAdapter
ますか? 目標は、メモリ リークを発生させず、効率的にすることです。