XxG*_*sxX 4 database sqlite android android-sqlite
我在这里阅读了很多关于StackOverflow的讨论,还有很多关于互联网网站的讨论:我什么时候应该打开和关闭我的sqlite数据库.我已经阅读了不同时期的各种回应和猜测.所以最后我比以前更困惑.人们建议:
在onDestroy()中关闭你的数据库注释:"OnDestroy()总是不被调用!使用onStop()!" - >所以onStart()必须打开它.
数据库有效地工作.无需关闭它.
打开数据库一次,创建一个字段和一个访问者.
使用后关闭.
还有很多...
那么2016年什么是正确的呢?请不要猜!
Examplelinks:
由于有大量的计算机编程的东西,没有单一的"正确进行"对(通过关闭SQLite数据库的时间close()上SQLiteOpenHelper,如果你正在使用,或close()在SQLiteDatabase其他).
一个相当硬的规则是不要SQLiteDatabase同时跨多个线程为同一个数据库使用多个对象.这可能会让你遇到麻烦,除非你正在进行自己的线程同步.如果您坚持SQLiteDatabase每个数据库一个对象,则在内部处理线程同步SQLiteDatabase.
由于one-database-for-all-threads规则,并且因为在许多不同的组件中跟踪何时线程可能或可能不想要数据库可能会很棘手,一些开发人员采用单一数据库管理器的方法,懒惰打开数据库......永远不会关闭它.例如,数据库支持ContentProvider使用此模式,因为ContentProvider它永远不会被销毁,因此没有明确的时间关闭数据库.
就个人而言,我会通过开放式使用 - 关闭方法走这条路线,特别是如果你使用SQLCipher for Android(加密的SQLite替代品).但是,如果您确定一次只有一个线程可以使用数据库,那么open-use-close方法没有什么特别的错误.
如果只有一个组件使用数据库,则触发打开数据库onCreate()并关闭数据库没有任何问题onDestroy().毕竟,如果这是唯一需要数据库的组件,那么当组件本身消失时,您不需要数据库.
在onDestroy()中关闭你的数据库注释:"OnDestroy()总是不被调用!使用onStop()!" - >所以onStart()必须打开它.
如果onDestroy()未在组件上调用,则表明您在该组件中遇到未处理的异常,或者您的进程已终止.后一种情况不是问题(再次,这是一个ContentProvider有效的方式,因为提供者永远不会被破坏).前一种情况不应该是一个问题,只要您不会在多个线程中意外地同时使用旧版本SQLiteDatabase和更新版本SQLiteDatabase.
数据库有效地工作.无需关闭它.
这不是效率问题.SQLite是事务性的.无法关闭数据库不是问题,因为没有未刷新的缓冲区或您必须担心的事情.
打开数据库一次,创建一个字段和一个访问者.
这与关闭数据库时没有任何关系.
使用后关闭.
这是一种模式,并且正确完成它可以工作.
| 归档时间: |
|
| 查看次数: |
4122 次 |
| 最近记录: |