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

标签 android realm

如果我有这样的 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/

相关文章:

android - 摩艾安卓构建问题

android - 如何在不使用 Scrollview 的情况下使 LinearLayout 可滚动

ios - 定义 Realm 数据库结构 (Swift)

java - 同一个git项目中的Android客户端和java服务器

android - Android 签名认证与平台认证有何不同?

android - 在 ViewPager 的页面上放置一个按钮

ios - Realm :模块是由旧版本的编译器创建的,无法构建 objective-c 模块

swift - 是否可以将NotificationTokens保存在创建它们的线程之外?

android - Realm Android 上的复杂查询

react-native - 如何将 JSON 快速插入到 React Native 应用程序的 Realm 数据库中