0
当使用LoaderEx SQLiteCursorLoader的FragmentActivity被暂停或销毁时,是否需要关注确保数据库已关闭?
感谢很多如果使用commonsware loaderex SQLiteCursorLoader时何时关闭数据库?
当使用LoaderEx SQLiteCursorLoader的FragmentActivity被暂停或销毁时,是否需要关注确保数据库已关闭?
感谢很多如果使用commonsware loaderex SQLiteCursorLoader时何时关闭数据库?
当FragmentActivity
被破坏,就应该对所有Loader
情况下,它创建的,这将在Loader
实现中调用onReset()
,调用reset()
这SQLiteCursorLoader
电话close()
任何优秀Cursor
。
请注意,当活动被破坏时会发生这种情况。看起来没有Loader
等同于当活动暂停时去激活Cursor
的管理Cursor
概念。这太遗憾了,因为这是一个很好的堆管理功能,我会思考如何最好地支持这一点。
如果您发现证据表明某些内容正在泄漏,file an issue in the LoaderEx project将提供有关如何重现错误的详细信息。
+1,但是如果我理解正确的话,'Loader'的一个优点就是数据(在这种情况下为'Cursor')在Activity被破坏后保留 - 例如配置更改。这是可能的,因为'LoaderManager'的生命与'Activity'解耦,可能会跨越(请纠正我,如果我错了)。但是,如果我们关闭所有'onDestroy()',这就不再成立。那么为什么不使用简单的'AsyncTask'呢?如何跟踪所有创建的'Loader'?那么关闭“SQLiteOpenHelper”呢?这也很重要 – Raffaele 2012-10-11 00:34:18
@Raffaele:'FragmentActivity'(和API Level 11+的基线“活动”),能够正确处理配置更改。在这个答案中,当我写下“被摧毁”时,我的意思是“最后一次被毁坏,而不是由于配置改变”。我对任何混淆抱歉。 – CommonsWare 2012-10-11 09:55:28
什么是与此*真正的破坏*相关的回调?需要它来关闭装载机。还需要确保在发生这种情况时没有'Loader'运行。此外,'LoaderManager' API没有列出init'ed'Loader',因此必须手工跟踪它们,或者只是初始化并关闭每个可能的加载器,但这种方法仅适用于* fixed *装载机,并且不能支持按需装载* – Raffaele 2012-10-11 10:42:34