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

tso*_*orn 7 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该再调用realm.close()onDestroy()ViewBookActivity?或者关闭它是否足够MainActivity

领域文档说:

Realm实例是引用计数,这意味着如果在线程中调用getInstance()两次,则还必须两次调用close().

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

另外,Realm.getDefaultInstance()即使在其他线程中,如果我在写入它时关闭它,它是否可以坚持下去?我真的不明白它的潜在用途Realm.getInstance(Context context).

谢谢

Chr*_*ior 7

最佳做法是,如果您打开Realm,onCreate则应onDestroy在所有活动中再次关闭它,因为这意味着当您的所有活动都已关闭时,引用计数将达到0.所以你的情况:是的,你应该这样做既中MainActivityViewBookActivity

关于Realm.getDefaultInstance().这只是一个简写Realm.getInstance(myConfig),所以你也必须打电话close()给那些.

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

  • 好.如果我在类(同一个线程)中使用Realm DB而不是一个活动(或片段或类似的东西),如静态控制器类,我并不特别热衷于做Realm.getDefaultInstance() `和每个方法中的`realm.close()`?是否可以创建"假"`onCreate()`和`onDestroy()`方法,并在`MainActivity`类的`onCreate()`和`onDestroy()`方法中调用它们?我意识到只要应用程序处于打开状态,数据库实例就会保持打开状态,但这是一个问题吗? (3认同)