Cursor的close方法源码解析
来源:互联网 发布:淘宝装修全屏海报 编辑:程序博客网 时间:2024/04/29 12:01
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; } }
0 0
- Cursor的close方法源码解析
- Dispose()与close()的关系--源码解析
- Android的Cursor的close方法不调用会不会造成内存泄露
- Android的Cursor的close方法不调用会不会造成内存泄露
- SQLiteOpenHelper/SQLiteDatabase/Cursor源码解析
- SQLiteOpenHelper/SQLiteDatabase/Cursor源码解析
- runqueryonbackgroundthread close cursor!解决办法
- runqueryonbackgroundthread close cursor
- Connection.close()的实现解析
- Cursor finalized without prior close()
- Cursor finalized without prior close()
- Scanner类的close()方法
- Cursor里的方法实现
- android关闭cursor的方法
- Android中Cursor的方法
- Cursor对象的常用方法
- 深入解析Close()和Dispose()的区别
- 深入解析Close()和Dispose()的区别
- 全球CPU四大IP核的攻“芯”战
- Elasticsearch+Kibana+Logstash 搭建日志平台
- Android 语言国际化
- hdu oj 4300 Clairewd’s message AC code
- linphone sdk 的使用
- Cursor的close方法源码解析
- 软件架构之 - Tier和Layer
- 完全卸载node.js
- java线程池使用
- UI之UINavigationBar的用法
- Fragment的生命周期
- Verizon发布2014年数据泄露调查报告:九大攻击模式为主
- OpenCV4Android 特征点提取演示
- j2se学习笔记-IO_1