【问题标题】:Android - Using realm in non activity classAndroid - 在非活动类中使用领域
【发布时间】:2016-09-02 15:17:53
【问题描述】:

我正在为 Android 创建一个应用程序。我正在使用领域作为数据库。领域在整个应用程序中运行良好。现在我想从“NotificationExtender”类中插入一些数据(这将有助于接收和自定义一个信号通知)。这导致 outOfMemory 错误我该如何处理。

我的示例代码: 在我的通知类中,我正在这样做

RealmLibrary.insertMessageToDBFromNotificationReceiver(
                                jsonObject.getString("data"),
                                jsonObject.getString("groupKey"),
                                jsonObject.getString("groupKey"),
                                 mContext);

在我的 RealmLibrary 类中:

Realm realm = getRealm(applicationContext);

realm.beginTransaction();
    ChatMessages chatmsg = realm.where(ChatMessages.class)
            .equalTo("gUid", gUID).findFirst();

    int count = 0;

    if (chatmsg == null) {
        // Create an new object
        chatmsg = realm.createObject(ChatMessages.class);

        count = 1;
        chatmsg.setgUid(gUID);
    } else {

    }

    realm.commitTransaction();

也是我的 getRealm 方法:

 public static Realm getRealm(Context context) {

        return  Realm.getDefaultInstance();

    }

我该如何处理这个内存不足。请任何人告诉我哪个代码导致错误。哪个是效率不高的代码..

注意:这只是一个示例代码。如果需要任何详细信息,请留下您的 cmets。

【问题讨论】:

  • 看看logcat可能会很有用
  • 好的,请稍等。我会更新问题
  • 你绝对没有在后台线程上关闭你的 Realm 实例。如果 gUID 是主键,你也应该使用 chatmsg = realm.createObject(ChatMessages.class, gUID);
  • @EpicPandaForce 不,我没有使用主键。但是是的,我没有关闭数据库如何关闭数据库?领域.close() ?我也试过这个。但是没用
  • have to close all opened instances on the background thread。通常我每个线程只打开一个实例。

标签: android realm


【解决方案1】:

我目前只有 49 点声望点,所以我无法对此发表评论。只是一个想法(也许这很愚蠢,如果是,请告诉我,我将删除此答案),您可能想要添加和使用 LeakCanary 并检查是否有一些内存泄漏:

dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
   testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
 }

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
  }
}

(如果您的 Activity 没有扩展 Application,请使用 LeakCanary.install(getApplication());

【讨论】:

    猜你喜欢
    • 2015-04-14
    • 2014-09-02
    • 1970-01-01
    • 2011-08-15
    • 2022-11-09
    • 2021-08-12
    • 2015-04-05
    • 2011-12-01
    相关资源
    最近更新 更多