`
meohao
  • 浏览: 94835 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

写在20110921:Cursor关闭问题

 
阅读更多
   Cursor是查询数据后得到的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存问题,而且虚拟机能够保证Cusor最终会被释放掉。然而如果Cursor的数据量特表大,特别是如果里面有Blob信息时,应该保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursor close掉,因为在源代码中我们发现,如果等到垃圾回收器来回收时,会给用户以错误提示。所以我们使用Cursor的方式一般如下:
Cursor cursor = null;
try{
    cursor = mContext.getContentResolver().query(uri,null,null,null,null);
    if(cursor != null){
        cursor.moveToFirst();
        //do something
    }
}catch(Exception e){
    e.printStatckTrace();
}finally{
    if(cursor != null){
        cursor.close();
    }

}
  有一种情况下,我们不能直接将Cursor关闭掉,这就是在CursorAdapter中应用的情况,但是注意,CursorAdapter在Acivity结束时并没有自动的将Cursor关闭掉,因此,你需要在onDestroy函数中,手动关闭。
@Override 
protected void onDestroy() {       
    if (mAdapter != null && mAdapter.getCurosr() != null) { 
        mAdapter.getCursor().close(); 
    } 
    super.onDestroy();  
}
    CursorAdapter中的changeCursor函数,会将原来的Cursor释放掉,并替换为新的Cursor,所以你不用担心原来的Cursor没有被关闭。你可能会想到使用Activity的managedQuery来生成Cursor,这样Cursor就会与Acitivity的生命周期一致了,多么完美的解决方法!然而事实上managedQuery也有很大的局限性。managedQuery生成的Cursor必须确保不会被替换,因为可能很多程序事实上查询条件都是不确定的,因此我们经常会用新查询的Cursor来替换掉原先的Cursor。因此这种方法适用范围也是很小。




分享到:
评论

相关推荐

    android在异步任务中关闭Cursor的代码方法

    查询数据会比较耗时,所以我们想把查询数据放在一个异步任务中,查询结果获得Cursor,然后在onPostExecute (Cursor result)方法中设置Adapter,我们可能会想到使用Activity的managedQuery来生成Cursor,这样Cursor就...

    右下角弹出窗口 javascript

    <body><div id="rbbox">()">关闭</a><iframe src="1.jpg" height="200" width="300" scrolling="no" ></iframe></div> </body> </html> <script language="javascript" type="text/javascript"> window.onload=...

    Android App调试内存泄露之Cursor篇

    最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时器,反注册,bitmap等等,我稍微统计并总结了一下,当然了,这些问题...

    数据库视图和索引游标实验报告.doc

    * 游标的关闭:Close cursor_name * 游标的释放:Deallocate cursor_name * 游标的修改数据:可以使用游标来修改数据,例如Update table_name Set column_name = 'new_value' Where current of cursor_name 四、...

    CURSOR 游标的使用

    有些像文件的使用,需要定义声明,打开关闭,操作等等。 前面都要加EXEC SQL,表示执行SQL语句。 (1)说明游标(声明——DECLARE) EXEC SQL DECLARE CURSOR FOR ; 只是说明,并没有执行其中的SELECT语 (2)打开...

    sql游标 cursor

    cursor的基本用法 主要是针对sql的用法 如声明 用法 关闭等等

    obsidian-remember-cursor-position:黑曜石插件。 记住每个音符的光标位置

    记住光标位置这个插件可以记住光标的位置并... 所有便笺的光标位置,滚动和文本选择都存储在文件中(可以在设置中设置路径),因此即使您关闭黑曜石并再次打开它,也可以恢复所有内容。 它可以在编辑和预览模式下工作。

    BenchmarkBotImpact

    公关功能从每个PR收集的数据如下(请注意,查看时数据可能已更改): cursor :这是唯一的ID,仅用于分页检索所有数据。 title :这是PR的当前标题。 createdAt ():PR的创建日期。 merged :PR是否合并。 ...

    place-cursor-at:X11的实用程序,可使用键盘移动鼠标光标

    写在Haskell。此实用程序仅使您能够将鼠标光标快速移动到屏幕的9个常见位置之一。目的是减少鼠标的使用,但不能完全取代它。它不能为您提供准确的瞄准,只能提供近似的瞄准。绑定一个热键(在WM配置中或使用 )以...

    第11章MySQL存储过程与函数.docx

    关闭游标:CLOSE cursor_name 创建存储过程的示例: CREATE PROCEDURE sp_update_email(IN user_name VARCHAR(50), IN e_mail VARCHAR(50)) UPDATE content SET email=e_mail WHERE username=user_name; 创建函数...

    oracle ora-各种常见java.sql.SQLException归纳

    Oracle 是一个强大的关系数据库管理系统,然而,在使用 Oracle 时,总是会遇到各种错误信息,这些错误信息是Oracle抛出的异常信息,用于提示开发者出现了什么问题。了解这些错误信息是非常重要的,因为它们可以帮助...

    ViewPage多页面切换+Cursor图片随手指一起移动

    在网上用找到一些ViewPager的例子,都很好,但是呢。现在需要做Cursor图片是随着手指的移动而反向移动。这个我是没找到,于是自己加工了一下。 原本一直考虑用View.layout(l,t,r,b);后来发现不行,最后该用了...

    Android 内存泄漏的几种可能总结

    Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的可能,...(译者注:Cursor忘记关闭等) 逻辑内存泄

    PL/SQL Developer8.04官网程序_keygen_汉化

     问题:假设有一张表t1,有f1和f2两个字段,f1为number类型,f2为varchar2类型,要往t1里写两条记录,内容自定。  Create or replace procedure test_procedure as V_f11 number :=1;  /*声明变量并赋初值*/  V_...

    Android内存泄漏的八种可能

    Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentationfault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的...(译者注:Cursor忘记关闭等)逻辑内存泄漏(logica

    Android个人通讯录

    最近写数据库,我就自己写了个带密码的个人通讯录,感觉sqlite特别好用,和mysql,sqlserver都一样,真是简单的关系型数据库,注意:开启数据库,cursor后一定要记得关闭close()掉,避免浪费资源。另外adapter的...

    python数据库编程:Python连接Mssql基础教程之Python库pymssql.pdf

    SQL语句的执⾏基本都在游标上进⾏ cursor.executeXXX⽅法执⾏SQL语句,cursor.fetchXXX获取查询结果等 调⽤close⽅法关闭游标cursor和数据库连接 import pymssql # server 数据库服务器名称或IP # user ⽤户名 # ...

    三星9305收索

    cursor:default}.bdsug li.bdsug-s{background:#ebebeb}.bdsug-store span,.bdsug-store b{color:#7a77c8}.bdsug-store-del{font-size:12px;color:#666;text-decoration:underline;position:absolute;right:8px;top:...

Global site tag (gtag.js) - Google Analytics