当我查看教程中的示例时,我发现对于getReadableDatabase
,数据库最后没有关闭,但对于getWritableDatabase
,它总是在结束时关闭。这是为什么?甚至文档也指定我必须在getWritableDatabase
上调用close。我已经阅读了两个文档,所以请不要简单地将文档引用给我。感谢。
答案 0 :(得分:1)
尽管文档暗示,getReadableDatabase()
和getWritableDatabase()
之间并没有真正的相关区别;打开数据库,该数据库保持打开状态,直到它为close()
d。
所以这些例子不正确;他们应该以同样的方式处理这两种情况。
请注意"当您不再需要数据库"并不一定意味着您需要在每次查询后关闭它;例如,如果活动可能多次访问数据库,则在活动开始时打开它是完全有效的,并且在活动停止时关闭它。
开放数据库连接为其缓存保留一些内存,如果需要更多内存,系统会停止活动,因此在没有活动活动时应确保没有打开的数据库。
答案 1 :(得分:0)
只要有正在使用的游标包含来自它的数据,您就需要保持数据库处于打开状态。我自己很少关闭数据库,即使使用getWriteableDatabase()
。
答案 2 :(得分:-1)
根据android文档sqlite database 可写数据库“一旦成功打开,数据库就会被缓存,所以每次需要写入数据库时都可以调用此方法。(确保在不再需要数据库时调用close()。)错误权限等错误或者一个完整的磁盘可能会导致此方法失败,但如果问题得到解决,将来的尝试可能会成功。“
由于writeable在打开后会被缓存,这意味着它会占用内存。 如果数据库很大,那么巨大的内存,所以不关闭它或保持打开可能会导致成员泄漏。
希望这可以帮助你:)