gpt4 book ai didi

android - 我是否必须在每个线程或每个使用/类的基础上关闭 Realm ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:50 24 4
gpt4 key购买 nike

如果我有这样的 MainActivity:

public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Set up database
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
Realm.deleteRealm(realmConfiguration); // Clean slate
Realm.setDefaultConfiguration(realmConfiguration); // Make this Realm the default

realm = Realm.getDefaultInstance();
}

@Override
public void onDestroy() {
realm.close();
super.onDestroy();
}
}

我在另一个类(同一线程)中使用 realm.getDefaultInstance(),如下所示:

public class ViewBookActivity extends Activity {
private Realm realm;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_result);

realm = Realm.getDefaultInstance();
}
}

然后我应该在 ViewBookActivityonDestroy() 中调用 realm.close() 吗?或者在 MainActivity 中关闭它就足够了吗?

Realm 文档说:

Realm instances are reference counted, which means that if you call getInstance() twice in a thread, you will also have to call close() twice as well.

但我不确定这是否适用于 getDefaultInstance()

此外,如果我在完成写入后关闭它,即使在其他线程中也可以坚持使用 Realm.getDefaultInstance() 吗?我不太了解 Realm.getInstance(Context context) 的潜在用法。

谢谢

最佳答案

最佳实践是,如果您在 onCreate 中打开 Realm,您应该在所有 Activity 中的 onDestroy 中再次关闭它,因为这意味着您的引用计数将达到 0 当所有你的 Activity 已经结束。所以在你的情况下:是的,你应该在 MainActivityViewBookActivity

中都这样做

关于 Realm.getDefaultInstance()。这只是 Realm.getInstance(myConfig) 的简写,因此您还必须对它们调用 close()

Realm.getInstance(Context) 只是 Realm.getInstance(new RealmConfiguration.Builder(context).build()) 的简写,旨在使其成为在小例子中真的很容易开始使用 Realm。如果您打算创建一个更大的应用程序,您应该手动创建您的配置。但我同意这可能会造成混淆,我们或许应该考虑将其全部删除。

关于android - 我是否必须在每个线程或每个使用/类的基础上关闭 Realm ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797790/

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