文档章节

Cursor的close方法源码解析

Kobe_Gong_5
 Kobe_Gong_5
发布于 2015/06/20 00:45
字数 215
阅读 36
收藏 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
成都
私信 提问
python操作数据库

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

zuzhou
01/07
0
0
ORACLE中DBMS_SQL的用法

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

紫地瓜
2012/12/06
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

没有更多内容

加载失败,请刷新页面

加载更多

get和post详解

get和post是表单提交的两种方式,get请求数据通过域名后缀URL传送,用户可见,不安全,post请求数据通过在请求报文正文里传输,相对比较安全。get是通过URL传递表单值,post通过URL看不到表单...

青衣霓裳
13分钟前
0
0
linux-如何快速替换IP

在Linux在做高可用的时候,经常会使用到虚拟IP。在windows上一个网卡可以配置两个IP,在Linux直接使用ip命令就可以添加了。 添加 ip address add 192.168.1.200/24 broadcast 192.168.1.255 ...

Linux就该这么学
17分钟前
0
0
Unix-Linux 编程实践教程 第五章 小结

设备文件中用逗号连接起来的两个数字为主设备号和从设备号。主设备号确定实际的设备驱动程序,从设备号作为参数。 如下图中的,主设备号-4,从设备号-2 设备文件中的i-node存储的是指向内核子...

Explorer0
20分钟前
0
0
virtual box centos7 挂载进行文件和共享使用说明

一、virtualbox共享文件夹无访问权限问题解决方法 (转载 http://www.cnblogs.com/zhuguanhao/p/6192777.html) 这篇文章主要介绍了virtualbox共享文件夹无访问权限问题解决方法,造成这个问题...

mbzhong
22分钟前
0
0
Rabbitmq---消息队列

一 . MQ:message queue   消息队列的作用:   1 通信解耦   2 高峰限流 原理分析: 一开始,认证系统是强耦合的,A系统传递认证系统消息接收计算结果的过程中   1 传给认证系统   2 认...

Ala6
27分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部