【问题标题】:Is it OK to close() Cursor object and than set a new value to it?可以关闭()光标对象然后为其设置新值吗?
【发布时间】:2019-02-05 10:04:47
【问题描述】:

我试图了解我需要使用的 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 对象上关闭和设置有什么危险吗?
谢谢

【问题讨论】:

    标签: java android android-recyclerview android-cursoradapter android-cursor


    【解决方案1】:

    您包含的两段代码在功能上是等效的。线

    Cursor oldCursor = mCursor;
    

    创建一个指向同一个对象的新Cursor 引用,即mCursoroldCursor 在内存中的位置相同。由于它们是同一个对象,oldCursor.close()mCursor.close() 完全相同。

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

    至于你应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您觉得通过创建oldCursor 使代码更清晰,请务必使用它。完全一样。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2014-07-28
      相关资源
      最近更新 更多