【发布时间】:2012-10-16 04:01:08
【问题描述】:
我在自定义视图中以不同的方法多次使用同一个光标。每次使用后我应该关闭光标还是可以保持打开状态直到视图被破坏?数据库也是如此,是否可以在创建保存此视图的活动后打开它,并在销毁活动时关闭它?当我按照上述方式执行操作时,我不断收到错误“数据库上从未显式调用 close()...”。
【问题讨论】:
标签: android android-sqlite android-cursor
我在自定义视图中以不同的方法多次使用同一个光标。每次使用后我应该关闭光标还是可以保持打开状态直到视图被破坏?数据库也是如此,是否可以在创建保存此视图的活动后打开它,并在销毁活动时关闭它?当我按照上述方式执行操作时,我不断收到错误“数据库上从未显式调用 close()...”。
【问题讨论】:
标签: android android-sqlite android-cursor
我应该在每次使用后关闭光标还是保持打开状态直到 视图被破坏了?
视情况而定。如果游标结果不会同时改变(例如远程连接修改数据库),那么没关系。不要忘记使用CursorLoader 让 Android 自动管理您的光标(例如,如果您的应用崩溃,请关闭光标)。
和数据库一样,可以打开一次活动吗? 是否持有该视图在 Activity 销毁时创建和关闭?
是的,您可以在onResume() 中打开并在onPause() 回调中关闭,或者当您知道您的数据库将不再被查询时。
我不断收到错误'close() 从未被明确调用过 在数据库上...' 当我按照上述方式进行操作时。
只有当您的应用崩溃时,这才是正常的。如果你像我上面说的那样做,就不应该发生。
【讨论】:
您可能希望在不需要时关闭所有与 DB 的连接。如果您以后需要它们,可以保持连接,即在要销毁 Activity 时关闭连接。
【讨论】:
您可以尝试将您的数据库和光标代码移动到 onResume 和 onPause 以避免该错误。但我想一个更干净的方法是在你的活动中实现LoaderCallbacks。你考虑过吗?
【讨论】: