现在的位置: 首页 > 综合 > 正文

SQLiteDatabase资源释放

2018年06月09日 ⁄ 综合 ⁄ 共 825字 ⁄ 字号 评论关闭

SQLiteDatabse是android SDK提供的一个sqlite管理类,用于创建,删除,执行sql命令等任务。每一个sqlite数据库对应着一个SQLiteDatabase帮助类。SQLiteDatabase提供了一系列的静态工厂方法用于创建一个SQLiteDatabase实例,这个实例持有着管理sqlite数据库的必要资源,这些资源的释放需要用户手动的调用close函数。SQLiteDatabase的资源释放是通过引用计数来实现的。产生一个新的SQLiteDatabase的时候,引用计数为1.每当有其他的对象使用SQLiteDatabase来操作sqlite的时候,引用计数加1,操作完毕之后,引用计数减1.当用户主动调用SQLiteDatabase的close函数的时候,先将引用计数减1,然后检查计数是否为0,如果为0,那么就需要释放SQLiteDatabase所持有的资源。

SQLiteDatabase类图结构如下:

AutoCloaseable是一个接口,含有成员void close()。抽象类SQLiteCloseable管理着引用计数,函数acquireReference将引用计数加1,releaseReference将引用计数减1.当引用计数减为0的时候,会调用onAllReferencesReleased()函数,这个函数中用来处理SQLiteDatabase所持有的资源。

这个简易的框架提供了处理数据库资源的一种方式,主动提供close函数,而不依赖finalize函数做数据库资源释放的动作。同时,巧妙的利用引用计数来管理资源的释放,这为多线程使用同一SQLiteDatabase实例能够正确的处理资源释放提供了保证。不会导致一个线程在使用SQLiteDatabase的时候,另一个线程调用close导致数据库被关闭的错误。因为close函数也只是将引用计数减1.只有当引用计数为0的时候才会做真正的资源释放动作。

抱歉!评论已关闭.