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