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