gpt4 book ai didi

java - close() Cursor 对象然后为其设置新值是否可以?

转载 作者:行者123 更新时间:2023-12-02 10:52:02 25 4
gpt4 key购买 nike

我试图理解我需要使用的 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引用,即mCursoroldCursor在内存中具有相同的位置。由于它们是同一个对象,oldCursor.close()mCursor.close() 完全相同。

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

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

关于java - close() Cursor 对象然后为其设置新值是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52097388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com