Android 设置CursorAdapter(上下文上下文、游标c、int标志)的目的是为了使其与CursorLoader一起工作?

Android 设置CursorAdapter(上下文上下文、游标c、int标志)的目的是为了使其与CursorLoader一起工作?,android,android-contentprovider,android-cursoradapter,android-loadermanager,android-cursorloader,Android,Android Contentprovider,Android Cursoradapter,Android Loadermanager,Android Cursorloader,谷歌文档指出不要使用CursorAdaptersfirst构造函数 CursorAdapter(Context context, Cursor c) 只有两个选择 CursorAdapter(Context context, Cursor c, boolean autoRequery) 上面说 允许控制自动重新查询的构造函数。建议您不要使用此选项,而是使用CursorAdapter(Context、Cursor、int)。使用此构造函数时,将始终设置标志\寄存器\内容\观察者` 及 这说明它

谷歌文档指出不要使用
CursorAdapters
first构造函数

CursorAdapter(Context context, Cursor c)
只有两个选择

CursorAdapter(Context context, Cursor c, boolean autoRequery)
上面说

允许控制自动重新查询的构造函数。建议您不要使用此选项,而是使用CursorAdapter(Context、Cursor、int)。使用此构造函数时,将始终设置标志\寄存器\内容\观察者`

这说明它是推荐的构造函数

问题是这里最后一个构造函数只有两个标志可用,
FLAG\u AUTO\u REQUERY
(int 1)和
FLAG\u REGISTER\u CONTENT\u OBSERVER
(int 2)。 使用
FLAG\u AUTO\u REQUERY
没有意义,因为我现在使用的是一个游标加载程序,可以在后台对其进行管理和更新。使用
FLAG\u REGISTER\u CONTENT\u OBSERVER
,它表示在使用
CursorLoader
时不需要它

现在我问,为了使它与我的
CursorAdapter
配合使用,我应该传递什么整数
CursorAdapter(上下文上下文、游标c、int标志)
?我担心的是如何正确管理旧游标。我真的不确定这样做的正确方法


如果我使用
FLAG\u REGISTER\u CONTENT\u OBSERVER
,那么我必须使用
onContentChanged()
,但是在我的
LoaderManager
中使用
swapCursor()
时,由于光标没有关闭,我可以只执行
adapter.swapCursor(光标).close()
。但这会与
光标或适配器中的
onContentChanged()
冲突吗?我们的目标是不造成任何内存泄漏并提高效率。

几周前我在博客上写过这个话题。。。也许通读会有所帮助。你也可以考虑阅读开发人员的网站。


我应该使用哪个构造函数

使用
CursorAdapter(上下文上下文、游标c、int标志)
(文档建议使用此构造函数而不是前者)

我应该传递哪个整数
CursorAdapter(上下文上下文、游标c、int标志)

只需传递整数
0
。您不想传递它
标志\u注册\u内容\u观察者
,因为您正在使用
光标适配器
(因为
光标适配器
为您注册
内容观察者),而且您肯定不想传递它
标志\u自动重新查询`因为该标志已被弃用

我担心的是如何正确管理旧游标。我真的不确定这样做的正确方法


LoaderManager
的全部要点是,它在幕后为您完成所有恼人的光标管理工作。自动加载数据而不必担心管理查询的游标的便利性正是旧的
startManagingCursor
stopManagingCursor
方法被弃用的原因

。。。我可以只做
adapter.swapCursor(游标).close()


不要那样做。
LoaderManager
将自行关闭光标。事实上,如果我没记错的话,如果您试图在光标上调用
close()
,就会出现错误。听起来你也不必重写
onContentChanged()

Lmao,你刚刚得到了所有答案,伙计!谢谢我会读你的博客。谢谢大家!<代码>LoaderManager
是我的专长。。。它也是Android框架中我最喜欢的类:)。我期待着回答您的下一个问题:PIt应该在API中定义为CursorAdapter.FLAG_NONE=0。。。谢谢你@AlexLockwood
CursorAdapter(Context context, Cursor c, int flags)`