是否可以关闭()Cursor对象而不是为它设置一个新值?

问题描述 投票:0回答:1

我试图理解我需要使用的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个回答
1
投票

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

Cursor oldCursor = mCursor;

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

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

至于你应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您通过创建oldCursor感觉代码更清晰,那么一定要去吧。它完全一样。

© www.soinside.com 2019 - 2024. All rights reserved.