文档章节

Cursor的close方法源码解析

Kobe_Gong_5
 Kobe_Gong_5
发布于 2015/06/20 00:45
字数 215
阅读 36
收藏 0
点赞 0
评论 0

Cursor.close会关闭与其关联的Database。

以DownloadManager中的CursorTranslator为例。
CursorTranslator继承CursorWrapper
CursorTranslator中包裹的cursor是ContentResolver的内部类CursorWrapperInner.
CursorWrapperInner中包裹了BulkCursorToCursorAdapter
BulkCursorToCursorAdaptor将服务端返回的IBulkCursor适配成本地进程可以使用的Cursor类型。
BulkCursorToCursorAdaptor继承于AbstractWindowedCursor。
AbstractWindowedCursor有一个成员变量是mWindow(CursorWindow类型)
AbstractWindowedCursor继承与AbstractCursor,并且覆盖了onDeactivateOrClose方法。

@Override
    protected void onDeactivateOrClose() {
        super.onDeactivateOrClose();
        closeWindow();
    }

closeWindow方法的实现是:

 protected void closeWindow() {
        if (mWindow != null) {
            mWindow.close();
            mWindow = null;
        }
    }

onDeactivateOrClose方法是在AbstractCursor的close方法中调用的。具体方法如下:

public void close() {
        mClosed = true;
        mContentObservable.unregisterAll();
        onDeactivateOrClose();
    }

CursorWindow继承于SQLiteClosable,在SQLiteClosable的close方法释放当前连接。

public void close() {
        releaseReference();
    }
    public void releaseReference() {
        boolean refCountIsZero = false;
        synchronized(this) {
            refCountIsZero = --mReferenceCount == 0;
        }
        if (refCountIsZero) {
            onAllReferencesReleased();
        }
    }

CursorWindow覆盖了onAllReferencesReleased方法。

protected void onAllReferencesReleased() {
        dispose();
    }
    private void dispose() {
        if (mCloseGuard != null) {
            mCloseGuard.close();
        }
        if (mWindowPtr != 0) {
            recordClosingOfWindow(mWindowPtr);
            nativeDispose(mWindowPtr);
            mWindowPtr = 0;
        }
    }

© 著作权归作者所有

共有 人打赏支持
Kobe_Gong_5
粉丝 2
博文 55
码字总数 43587
作品 0
成都
ORACLE中DBMS_SQL的用法

对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: open cursor---> parse---> define column---> excute---> fetch rows---> close cursor; 而对于dml操作(insert,updat......

紫地瓜
2012/12/06
0
0
python操作数据库

游标 在stored Routines调用中开的一个缓冲区,用于存放SQL调用的结果集。(结果集是只读的) 意味着我们的查询可以返回一个文档也可以返回一个游标去指向一个结果集,而后通过游标的切换而获...

zuzhou
01/07
0
0
继人员列表,聊天的实现,包括图片,语音,位置,表情

强烈推荐: eoeandroid wiki http://wiki.eoeandroid.com/%E9%A6%96%E9%A1%B5 eoeandroid 招聘 http://zhaopin.eoe.cn/?from=forum Android资源汇总贴,给力! http://www.eoeandroid.com/th......

长平狐
2012/08/09
252
0
继人员列表,聊天的实现,包括图片,语音,位置,表情

强烈推荐: eoeandroid wiki http://wiki.eoeandroid.com/%E9%A6%96%E9%A1%B5 eoeandroid 招聘 http://zhaopin.eoe.cn/?from=forum Android资源汇总贴,给力! http://www.eoeandroid.com/th......

长平狐
2012/08/21
68
0
Python操作MySQL数据库实例

上次说到使用python制作人体艺术图片站点时,用到了python,但是如何使用python操作mysql数据库呢?接下来就是答案了 在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,...

yangjiyue0520
2017/11/20
0
0
Python操作Mysql实例代码教程在线版(查询手册)

实例1、取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -- coding: UTF-8 -- #安装MYSQL DB for python import ...

Airship
2016/03/04
12
0
数据库cursor泄露的bug修改

简介: 本文介绍如何在 Android 检测 Cursor 泄漏的原理以及使用方法,还指出几种常见的出错示例。有一些泄漏在代码中难以察觉,但程序长时间运行后必然会出现异常。同时该方法同样适合于其他...

今日竹石
2014/03/27
0
0
Python模块详解

Python为开发人员提供了丰富的模块,通过这些模块,我们就可快速开发出功能强大的程序。本笔记记录我所接触或学习过的Python模块,为想学习Python的朋友提供一个参考。 Table of Contents 1....

长平狐
2012/09/20
2.9K
0
数据库--import MySQLdb--cx_ora

-- --import------import mysqldb 模块---python操作数据库---------------------------------------------------------------------------- -- --python实现读取excel写入mysql的小工具详解......

liapple6
2017/12/26
0
0
求大家帮忙看看这段代码究竟哪里有不妥之处

public class Achart_in{ private MoneyOpenHelper helper = null; private SQLiteDatabase db = helper.getReadableDatabase(); public double getCount1() { Cursor cursor = db.rawQuery(......

赵金龙啊
2014/04/27
139
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud云服务 - HongHu架构common-service 项目构建过程

上一篇我们介绍了《整合spring cloud云服务架构 - HongHu云架构common-service代码结构分析》,本节我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来...

itcloud
4分钟前
0
0
Connection reset

在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会...

夜黑人模糊灬
8分钟前
0
0
如何写PHP规范注释

所有的文档标记都是在每一行的 * 后面以@开头。如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。 @access 该标记用于指明关键字的存取权限:private、public或prote...

度_
9分钟前
0
0
influxDB Ppostgis

PostGis 1.需要安装postgreSQL,postgis作为插件嵌入到postgreSQL中; 2.使用zip包直接安装,需要修改 makepostgisdb_using_extensions.bat文件中的路径,用户名,密码,然后直接运行; 3.没有...

courtzjl
12分钟前
0
0
多线程Thread-多线程顺序执行

需求:现在有两个任务,任务1和任务2,任务1中有多个线程,并且任务2必须等任务1完成后才能执行。 namespace TThread{ class Program { static void Main(string[] ar...

kaixinguo314
16分钟前
1
0
直播总结

https://blog.csdn.net/weiyuefei/article/details/70257616 视频: 上传服务,转码服务,视频一致性MD5 视频转码技术及转码实现详解 https://wenku.baidu.com/view/32702108844769eae009eda...

素雷
18分钟前
0
0
Linux系统-tcpdump常用抓包命令

序言 单独总结tcpdump抓包的常用命令 主要语法 过滤主机/IP: tcpdump -i eth1 host 172.16.7.206 抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口: tcpdump -i eth1 dst port...

MrBoyce
19分钟前
0
0
274. H-Index - LeetCode

Question 274. H-Index Solution 题目大意: 论文里的 h 因子判定,题目的意思可能有点晦涩。h 因子是评判学术成就的一种重要方法,h 因子越高越好,h 因子兼顾研究学术人员的学术产出数量与...

yysue
24分钟前
0
0
 Unable to read class [com.mrp.action.BaseAction]

struts2启动时,出现的 Unable to read class [com.mrp.action.BaseAction] java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/DefaultClassFinder$InfoBuildingVisito......

uug
25分钟前
0
0
分发系统介绍&expect脚本远程登录&expect脚本远程执行命令&expect脚本传递参数

20.27 分发系统介绍 应用场景 企业中随之业务的逐渐增大,后端所使用的编程语言是php,系统为LAMP/LNMP架构,需要将代码上传到服务器中;代码会不断的迭代,这就需要在业务服务器上更新代码,...

影夜Linux
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部