我应该在哪里关闭光标?

时间:2012-06-19 23:08:46

标签: android

我有一个带有微调器的活动,它加载了一个simpleCursorAdaptor。我调用另一个类来返回simpleCursorAdaptor使用的游标。我没有保留游标或适配器的类级别变量。

当此活动关闭时,我想关闭光标。我应该:

a)在activitie的onDestroy()事件中,通过适配器从微调器获取光标并将其关闭或

b)在第一个位置生成光标的数据处理程序类

3 个答案:

答案 0 :(得分:3)

如果使用loaderManager或supportedLoaderManager创建光标,则不必担心关闭光标。还建议使用加载程序打开游标,以便在UI线程上执行此操作。

但是出于某种原因,如果你必须使用UI线程上的contentresolver查询游标,最好关闭onPause中的游标并在onResume中重新查询游标,最坏的情况是在onDestroy中关闭它,可能有一个实例,在调用onDestory之前,活动可能是垃圾收集的。

但是如上所述,请尝试使用带有Loadermanager和LoaderCallbacks的CursorLoader创建游标

答案 1 :(得分:1)

您是否考虑过startManagingCursor(Cursor c)方法?

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

Altough,我认为你应该将CursorLoader与LoaderManager一起使用(如文档中所述)。这个类可以在android-support库中找到。但请记住,CursorLoader仅适用于ContentProvider。如果您想要一个带有简单光标的CursorLoader,请参阅此CursorLoader usage without ContentProvider

修改

现在已弃用加载程序。

答案 2 :(得分:-1)

您必须关闭onStop()onDestroy()中的光标。或者,您可以在从查询中获取Cursor后调用startManagingCursor(),Android将自行关闭Cursor。