为了在我的应用程序中实现数据库访问,我遵循了Lars Vogel 教程,但我对一些事情感到非常困惑......
每次调用
fetchTodo
新游标时都会创建并返回。将前一个光标留给垃圾收集器。所以,如果我不使用startManagingCursor
甚至不使用CursorLoader
,我应该在完成后调用.close()
光标上的 a 吗?当然,超出fetchTodo
范围,例如:光标 cursor = mNotesAdapter.fetchTodo(); // 做点什么... cursor.close();
我已经完成了这个游标,并且将在下一次获取时创建新的游标,我应该像这样关闭它还是应该将它留给垃圾收集器?虽然我认为我在谈论两件完全不同的事情......重点是,我应该像上面的例子那样关闭它吗?
Cursor
也有一个.deactivate()
方法,文档说它使用更少的资源(比活动游标)。我应该什么时候使用这个?例如,在我的应用程序中,我有一个ListActivity
通过 a 填充的 aSimpleCursorAdapter
(为此的代码初始化只调用一次)。正在使用的游标是一个类成员变量,因为我需要它在填充列表的方法之外。当从数据库中删除某些内容时,我需要它来重新查询数据库。但是在删除记录之前,这是用户操作并且可能需要一段时间才能发生,我是否应该同时停用光标?因为当我再次调用时它会再次激活.requery()
。还是SimpleCursorAdapter
因为光标不活动而停止工作?
编辑:我刚刚测试了这个,发现deactivate()
设置光标适配器后我无法调用。如果光标未处于活动状态,则列表将为空,因此只要显示 ListActivity,它就需要保持活动状态。最后,我们应该让它StartManagingCursor
处理它。或者新的CursorLoader
.
- 我知道
startManagingCursor
/stopManagingCursor
已被弃用,但我不是针对 Honeycomb(至少目前是这样),我现在不想处理新CursorLoader
的。但是在上面的教程中,startManagingCursor
到处都使用,但从stopManagingCursor
不调用一次。为什么不?Android 是否以自己的方式处理这个问题?有什么情况我应该打电话stopManagingCursor
吗?