我试图理解我需要使用的RecyclerView.Adapter实现,其中数据集是Cursor对象。 但是关于关闭Cursor对象而不是将其设置为不同的值,我的一些逻辑并不清楚。 close()究竟发生了什么?这个可以吗。 ?
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
感觉代码更清晰,那么一定要去吧。它完全一样。