文档章节

Cursor的close方法源码解析

Kobe_Gong_5
 Kobe_Gong_5
发布于 2015/06/20 00:47
字数 214
阅读 11
收藏 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方法。

@Overrideprotected 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

没有更多内容

加载失败,请刷新页面

加载更多

Apache用户认证,域名跳转

11月15日任务 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志 11.18 Apache用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑......

zgxlinux
48分钟前
1
0
idea 添加 VUE 的语法支持和开发

《一》VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting -> Edit -> Inspections -> html 3,...

文文1
今天
2
0
【NLP】【七】fasttext源码解析

【一】关于fasttext fasttext是Facebook开源的一个工具包,用于词向量训练和文本分类。该工具包使用C++11编写,全部使用C++11 STL(这里主要是thread库),不依赖任何第三方库。具体使用方法...

muqiusangyang
今天
3
0
防止Tweak

什么是tweak? 英文意思为捏, 拧,扭,稍稍调整(机器、系统等)。 依据维基百科的定义,tweak指的是对电子系统进行轻微调整来增强其功能的工具;在ios中tweak特指那些能够增强其它可执行程...

HeroHY
今天
3
0
linux中常用标识---不定期更新

LINUX常用标识符: 1 & && | || &: 表示进程在后台运行 例如 redis-server & 不是所有后台运行都是& 比如es ./bin/elasticsearch -d es后台运行&&: 第一个命令执行成功后 才执行后面的命令...

geek土拨鼠
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部