我在 Application 类的主线程上保留了一个单一 Realm 实例,我使用该单一实例从 MainActivity 执行各种数据库操作。由于我的应用程序只有一个 Activity ,因此我关闭了 Activity 的 onDestroy() 中的实例。到目前为止,该应用程序对我来说运行良好。

不做 realm.close() 的后果是什么?无论是否相同,我的数据库都没有损坏。

另外,我读到在某些情况下可能根本不会调用 Activity 的 onDestroy()。如果关闭 Realm 如此重要,数据库在这种情况下会产生什么影响?

public class MyApp extends Application {

    private static MyApp instance;
    private Realm realm;

    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
                .schemaVersion(BuildConfig.VERSION_CODE)
                .migration(new RealmMigrationClass())
                .compactOnLaunch()
                .build());
        realm = Realm.getInstance(Realm.getDefaultConfiguration());
    }

    public static MyApp getInstance() {
        return instance;
    }

    public Realm getRealm() {
        return realm;
    }
}

主要 Activity
public class MainActivity extends Activity {

    @Override
    protected void onDestroy() {
        MyApp.getInstance().getRealm().close();
        super.onDestroy();
    }

}

最佳答案

关闭realm实例非常重要,因为realm核心是用c++编程语言编写的,是用原生代码编译的。而且我们知道c++垃圾收集不会自动运行,我们需要手动调用垃圾收集。所以当你调用 realm.close() 表示域释放 native 内存意味着释放或删除指针变量并执行文件描述符工作。从 realm.close() 表示您向 native C++ 编译器提供命令或告诉运行垃圾收集。

关于android - 如果我在不关闭开放 Realm 实例的情况下关闭我的 android 应用程序会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49587661/

10-16 23:32