关闭() 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 指向同一个对象的引用,也就是说,mCursoroldCursor 在内存中有相同的位置。由于它们是同一个对象,oldCursor.close()mCursor.close().

完全相同

但是,当您将 mCursor 设置为 cursor 时,mCursor 不再指代已关闭的游标;它现在指的是与 cursor 相同的对象。您在新 mCursor 上执行的任何操作都不会以任何方式受到旧 mCursor 的影响。

至于你应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您觉得通过创建 oldCursor 代码更清晰,无论如何,请去做。一模一样