什么时候在Android中关闭光标?

Posted

技术标签:

【中文标题】什么时候在Android中关闭光标?【英文标题】:When to close cursor in Android? 【发布时间】:2011-05-06 14:48:45 【问题描述】:

我有一个应用程序,它使用光标通过rawQuery 从 SQLite DB 中选择数据以填充 android 中的 ListView。每次用户单击列表视图项时,我都会创建一个新的 Activity 实例来重新填充列表视图。

调用cursor.close()db.close() 来避免内存问题会更好吗?我实际上在我的活动的OnDestroy() 中有db.close()

【问题讨论】:

也许这可以帮助***.com/questions/8532427/… 【参考方案1】:

在您的方法中检索到该特定对象的值后,您可以关闭cursor

顺便说一句...您不必每次都为用户单击事件重新创建listview。只需通知列表视图上设置的适配器数据发生了一些变化。

类似

youradaptername.notifyDataSetChanged();

这应该会自动重新填充你的 listview 中的内容。

【讨论】:

在哪里添加这一行 youradaptername.notifyDataSetChanged();? oncreate() 还是 setitemclicklistener? notifyDataSetChanged() 需要在您知道适配器中的数据已更改时调用。这将强制列表视图重新绘制其视图,从而帮助您查看列表中的新数据。您将在哪里调用 notifyDataSetChanged() 取决于您的需要。示例参考此帖***.com/questions/16441298/…【参考方案2】:

如果您每次都为同一个 Activity 创建一个新实例(尽管我不确定这是一个好的编程习惯)。完成遍历/迭代列表视图的源后,您可以关闭光标。

例子:

示例实现类似于

//Pre cursor code
startManagingCursor(cursor);
if (cursor.moveToFirst()) 
    do 
        if (cursor.getString(0).equals(value)) 
            cursor.close();
            a = true;
            return a;
        
     while (cursor.moveToNext());


//Close cursor here, when its work is complete
cursor.close();

//Post cursor code ...

【讨论】:

将 cursor.close() 包装在 finally 子句中始终是一个好习惯。这样,无论在处理过程中是否抛出 RuntimeException,您都可以确保您的光标已关闭。

以上是关于什么时候在Android中关闭光标?的主要内容,如果未能解决你的问题,请参考以下文章

Android中关闭DatePickerTimePickerNumberPicker的可编辑模式

Android中关闭应用的三种方式

如何以编程方式在android中关闭GPS? [复制]

Android - multiDexKeepProguard 的目的是啥?它与 gradle 中关闭的 proguardFiles 相比如何?

如何在android中关闭AlertDialog

如何在android中关闭数据连接?