gpt4 book ai didi

android - 如何在整个应用程序生命周期中维护单个 Realm 实例并关闭它?

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

如何在应用程序的整个生命周期中维护单个 Realm 实例并关闭它。

我可以使用单例类来维护实例,但是当应用程序关闭时我该如何关闭它?

此外,Realm 实例一旦打开就不要关闭是否安全?

最佳答案

我倾向于使用单例 RealmManager 对于 UI 线程,对于后台线程,我使用 try-with-sources 打开/关闭 Realm block 。

所以对于 UI 线程:

public class RealmManager {
private static final String TAG = "RealmManager";

static Realm realm;

static RealmConfiguration realmConfiguration;

public static void initializeRealmConfig(Context appContext) {
if(realmConfiguration == null) {
Log.d(TAG, "Initializing Realm configuration.");
setRealmConfiguration(new RealmConfiguration.Builder(appContext).initialData(new RealmInitialData())
.deleteRealmIfMigrationNeeded()
.inMemory()
.build());
}
}

public static void setRealmConfiguration(RealmConfiguration realmConfiguration) {
RealmManager.realmConfiguration = realmConfiguration;
Realm.setDefaultConfiguration(realmConfiguration);
}

private static int activityCount = 0;

public static Realm getRealm() {
return realm;
}

public static void incrementCount() {
if(activityCount == 0) {
if(realm != null) {
if(!realm.isClosed()) {
Log.w(TAG, "Unexpected open Realm found.");
realm.close();
}
}
Log.d(TAG, "Incrementing Activity Count [0]: opening Realm.");
realm = Realm.getDefaultInstance();
}
activityCount++;
Log.d(TAG, "Increment: Count [" + activityCount + "]");
}

public static void decrementCount() {
activityCount--;
Log.d(TAG, "Decrement: Count [" + activityCount + "]");
if(activityCount <= 0) {
Log.d(TAG, "Decrementing Activity Count: closing Realm.");
activityCount = 0;
realm.close();
if(Realm.compactRealm(realmConfiguration)) {
Log.d(TAG, "Realm compacted successfully.");
}
realm = null;
}
}
}

对于后台线程:

try(Realm realm = Realm.getDefaultInstance()) {
// ...
}

关于android - 如何在整个应用程序生命周期中维护单个 Realm 实例并关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298327/

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