我有一个带有微调器的活动,它加载了一个 simpleCursorAdaptor。我调用另一个类来返回 simpleCursorAdaptor 使用的光标。我不保留游标或适配器的类级别变量。
当此活动关闭时,我想关闭光标。我是不是该:
a) 在活动的 onDestroy() 事件中,通过适配器从微调器获取光标并将其关闭或
b)在首先生成光标的数据处理程序类中
我有一个带有微调器的活动,它加载了一个 simpleCursorAdaptor。我调用另一个类来返回 simpleCursorAdaptor 使用的光标。我不保留游标或适配器的类级别变量。
当此活动关闭时,我想关闭光标。我是不是该:
a) 在活动的 onDestroy() 事件中,通过适配器从微调器获取光标并将其关闭或
b)在首先生成光标的数据处理程序类中
如果您使用 loaderManager 或 supportedLoaderManager 创建游标,则无需担心关闭游标。还建议使用加载程序打开游标,以便在 UI 线程之外执行此操作。
但是由于某种原因,如果您必须使用 UI 线程上的 contentresolver 查询游标,最好在 onPause 中关闭游标并在 onResume 中重新查询游标,最坏的情况是在 onDestroy 中关闭它,可能会有在调用 onDestory 之前可能会收集活动垃圾的实例。
但是如上所述,请尝试使用带有 Loadermanager 和 LoaderCallbacks 的 CursorLoader 创建光标
您是否考虑过 startManagingCursor(Cursor c) 方法?
尽管如此,我认为您应该将 CursorLoader 与 LoaderManager 一起使用(如文档中所述)。这些类在 android-support 库中可用。但请记住,CursorLoader 仅适用于 ContentProvider。如果您想要一个带有简单光标的 CursorLoader,请参阅没有 ContentProvider 的 CursorLoader 用法
编辑:
这现在已被 Loaders 弃用。
您必须在onStop()
或中关闭光标onDestroy()
。或者,您可以startManagingCursor()
在从查询中获取光标后调用,Android 将自行关闭光标。