关闭() Cursor 对象并为其设置新值是否可以?
Is it OK to close() Cursor object and than set a new value to it?
我正在尝试理解我需要使用的 RecyclerView.Adapter 实现,其中数据集是 Cursor 对象。
但是关于关闭 Cursor 对象并将其设置为不同的值,我不清楚某些逻辑。
close() 到底发生了什么?
这是O.K。 ?
public void setCursor(Cursor cursor){
mCursor.unregisterContentObserver(mMyContentObserverr);
mCursor.close();
mCursor = cursor;
mCursor.registerContentObserver(mMyContentObserverr);
notifyDataSetChanged();
}
或者我应该像这样谨慎行事:
public void setCursor(Cursor cursor){
Cursor oldCursor = mCursor;
oldCursor.unregisterContentObserver(mMyContentObserverr);
oldCursor.close();
mCursor = cursor;
mCursor.registerContentObserver(mMyContentObserverr);
notifyDataSetChanged();
}
使用 oldCursor 有什么好处?
在同一个 Cursor 对象上关闭和设置有什么危险吗?
谢谢
您包含的两段代码在功能上是等效的。行
Cursor oldCursor = mCursor;
创建一个新的 Cursor
指向同一个对象的引用,也就是说,mCursor
和 oldCursor
在内存中有相同的位置。由于它们是同一个对象,oldCursor.close()
与 mCursor.close()
.
完全相同
但是,当您将 mCursor
设置为 cursor
时,mCursor
不再指代已关闭的游标;它现在指的是与 cursor
相同的对象。您在新 mCursor
上执行的任何操作都不会以任何方式受到旧 mCursor
的影响。
至于你应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您觉得通过创建 oldCursor
代码更清晰,无论如何,请去做。一模一样
我正在尝试理解我需要使用的 RecyclerView.Adapter 实现,其中数据集是 Cursor 对象。
但是关于关闭 Cursor 对象并将其设置为不同的值,我不清楚某些逻辑。
close() 到底发生了什么?
这是O.K。 ?
public void setCursor(Cursor cursor){
mCursor.unregisterContentObserver(mMyContentObserverr);
mCursor.close();
mCursor = cursor;
mCursor.registerContentObserver(mMyContentObserverr);
notifyDataSetChanged();
}
或者我应该像这样谨慎行事:
public void setCursor(Cursor cursor){
Cursor oldCursor = mCursor;
oldCursor.unregisterContentObserver(mMyContentObserverr);
oldCursor.close();
mCursor = cursor;
mCursor.registerContentObserver(mMyContentObserverr);
notifyDataSetChanged();
}
使用 oldCursor 有什么好处?
在同一个 Cursor 对象上关闭和设置有什么危险吗?
谢谢
您包含的两段代码在功能上是等效的。行
Cursor oldCursor = mCursor;
创建一个新的 Cursor
指向同一个对象的引用,也就是说,mCursor
和 oldCursor
在内存中有相同的位置。由于它们是同一个对象,oldCursor.close()
与 mCursor.close()
.
但是,当您将 mCursor
设置为 cursor
时,mCursor
不再指代已关闭的游标;它现在指的是与 cursor
相同的对象。您在新 mCursor
上执行的任何操作都不会以任何方式受到旧 mCursor
的影响。
至于你应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您觉得通过创建 oldCursor
代码更清晰,无论如何,请去做。一模一样