我是否必须基于每个线程或每个使用/类别来关闭领域?

时间:2015-09-26 13:37:57

标签: 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();
    }
}

我应该在realm.close()的{​​{1}}中拨打onDestroy()吗?或者在ViewBookActivity中关闭它是否足够?

Realm文档说:

  

Realm实例是引用计数,这意味着如果你打电话   getIstance()在一个线程中两次,你还必须调用close()   两次。

但我不确定这是否适用于MainActivity

另外,如果我在写完文章时关闭它,即使在其他线程中也可以坚持getDefaultInstance()吗?我真的不明白Realm.getDefaultInstance()的潜在用法。

由于

1 个答案:

答案 0 :(得分:7)

最佳做法是,如果您在onCreate中打开王国,则应在onDestroy的所有活动中再次关闭它,因为这意味着当您的所有活动都已关闭时,引用计数将达到0。因此,在您的情况下:是的,您应该同时使用MainActivityViewBookActivity

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

Realm.getInstance(new RealmConfiguration.Builder(context).build())只是FormData()的简写,旨在让您在小例子中轻松开始使用Realm。如果您打算创建更大的应用程序,则应手动创建配置。但我同意这可能令人困惑,我们应该考虑将它们全部删除。